标签: api-design

在 REST API 中放置验证码令牌的最佳位置是哪里

我正在设计一个 REST api,允许客户端 POST(创建)资源。我们称我的资源为 is Subscription,我的 REST api 接受一个名为 POST 请求的 Dto,Subscription 该 POST 请求需要与将在服务器端进行验证的验证码令牌一起发送。

我的问题是哪里是放置验证码令牌的最佳位置,我正在考虑一些选项:

  1. 直接在里面Subscription
  2. 作为 URL 中的参数,例如:/subscriptions?captcha_token=abcd1234
  3. 作为 HTTP 标头
  4. 创建一个新的 Dto 来包装Subscription并携带字段captchaToken

欢迎任何其他建议。

谢谢。

rest captcha api-design recaptcha

3
推荐指数
1
解决办法
3618
查看次数

是否值得使用两个独立的 API 服务器来进行身份验证和其他常规操作?

我是后端开发新手,正在开发一个拥有庞大用户群的项目(与 Uber Eats 非常相似)。我们的团队应该开发网络应用程序和移动应用程序(适用于 Android 和 IOS)。由于时间限制和预算,我们决定首先实施 PWA,然后考虑到客户满意度,我们还计划实施本机移动应用程序。

我想知道,在为这种应用程序系统创建后端时,是否值得分别实现两个 API 服务器用于身份验证和其他通用 API 调用,并且与将两者保留在一个 API 中相比,性能是否会有相当大的提高服务器?实现两个原生移动应用后会改变吗?

api-design backend

3
推荐指数
1
解决办法
2951
查看次数

为什么 k8s 容器规范“命令”字段是一个数组?

根据这个官方 kubernetes 文档页面,可以向容器提供“命令”和参数。

该页面出现了 13 次字符串“a command”和 10 次出现“the command”——请注意使用单数。

(除了文件名之外)复数“命令”出现 3 次:

  1. 其中一个页面是 Get a Shell to a Running Container,我对此不感兴趣。我对容器的启动命令感兴趣。

  2. 其中提到的是在 shell 环境中运行多个管道命令,但是提供的示例使用单个字符串:command: ["/bin/sh"]

  3. 第三次出现在介绍性句子中:

本页展示了在 Pod 中运行容器时如何定义命令和参数。

command所有示例(包括给出或省略时如何交互的解释args)仅显示数组中的单个字符串。它甚至似乎只打算使用单个command,它将接收所有指定的args,因为该字段以单数命名。

问题是:为什么这个字段是一个数组?

我认为 Kubernetes 的开发者对此有充分的理由,但我想不出一个。这里发生了什么?是遗产吗?如果是这样,怎么会这样呢?是面向未来的准备吗?如果是这样,那又是为了什么?是为了兼容吗?如果是的话,为了什么呢?

编辑:

正如我在下面的评论中所写的,我现在能想到的唯一原因是:k8s 开发人员希望实现 和 的交互,commandargs允许用户 单个参数中指定命令的所有部分具有跨command和的命令范围args。所以本质上是功能和可读性之间的折衷。

谁能证实这个假设?

api-design kubernetes

3
推荐指数
1
解决办法
2407
查看次数

如何清理 Rails API 参数

我正在制作自己的 API,我想知道:如何保护收到的参数?

例子:

  • brand我有一个具有和属性的汽车模型color

我的端点在有效负载中接收这些参数。通过收到的有效负载,我在数据库中搜索:

car = Car.where(color: params[:color])
# or
car = Car.find_by(brand: params[:brand])
# or writing
Car.first.update!(brand: params[:brand])
Run Code Online (Sandbox Code Playgroud)

但我很担心如果有人尝试使用 SQL 或 XSS 进行利用怎么办?你如何处理这个问题?

ruby sql api-design ruby-on-rails

3
推荐指数
1
解决办法
957
查看次数

为什么 Flask-RESTful 的 add_resource() 有一个用于 URL 的参数和另一个用于端点的参数?

我正在使用 Flask 和 Flask-RESTful 扩展开发一个 API。我正在创建端点和资源,但我对资源“url”及其“端点”之间的区别感到困惑。据我了解,URL 本身就是端点。我还阅读了StackOverflow 问题的答案,他们还建议 URL 是端点。

然而Flask-RESTful 文档提到该add_resource方法有一个 URL 参数,并且它还可以接收端点名称。他们甚至提供了这个例子:

api.add_resource(HelloWorld, '/', '/hello')
api.add_resource(Foo, '/foo', endpoint="foo")
api.add_resource(FooSpecial, '/special/foo', endpoint="foo")
Run Code Online (Sandbox Code Playgroud)

我明白他们在做什么,但我还是不明白端点名称的作用。

URL 和端点名称有什么区别?为什么我要设置端点名称?

python api-design endpoint flask flask-restful

3
推荐指数
1
解决办法
3500
查看次数

多个操作取决于传递的对象的类型

假设我创建了一个传递对象的方法,该方法将根据传递的对象执行操作.我该如何识别物体?

我想过使用类名来标识对象,但这可能是不切实际的,因为我可以轻松地更改对象的类名,并在将来的开发过程中产生令人头疼的问题.我对吗?

编辑:例如,我有对象球和炸弹.如果我有另一个叫做墙的物体,墙有解决与墙碰撞的方法(例如碰撞球和炸弹的坐标),但根据碰撞对象(即球和炸弹)有不同的逻辑

java api-design

2
推荐指数
1
解决办法
175
查看次数

放弃重载有利于Extension方法

既然我们在C#中有扩展方法,那么为了传递默认值,在实现任何类的过程中是否还有任何重点?为什么在重载时可以使扩展方法污染类实现?重载的任何优点(用于传递默认值)?

我正在计算默认参数的选项,因为它强制参数的特定排序(即默认值可以结束)以及默认值在客户端代码中编译并且服务包可能因此而中断的事实.

c# extension-methods api-design c#-4.0

2
推荐指数
1
解决办法
387
查看次数

API包的语义版本控制

当在API捆绑包中以1.0.0版本的版本开始时,在向所述包添加新接口之后新版本应该是什么?该白皮书使得关于兼容性这一说法:

显然,二进制兼容性在向后兼容性中起着重要作用.但是,向后兼容性也非常依赖于语义.如果接口的责任发生变化,它仍然可以是二进制兼容的,但不再向后兼容.

同时...

3.micro - 微观部分的差异并不表示任何向后兼容性问题

新接口不会导致其提供程序的任何二进制不兼容性 - 很可能只是省略一个实现.这被认为是包的语义中的"向后不兼容"的变化吗?这是否意味着新版本应该是1.1.0?

versioning osgi api-design backwards-compatibility semantics

2
推荐指数
1
解决办法
442
查看次数

为什么FileExists不支持通配符?

考虑这个示例VBScript片段:

Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FileExists("D:\Folder\File*.ext") Then ' Finds nothing!
  fs.CopyFile "D:\Folder\File*.ext", "D:\OtherFolder\"
  fs.Deletefile "D:\Folder\File*.ext"
End If
Run Code Online (Sandbox Code Playgroud)

FileExists方法证明不支持通配符(*?).没有FolderExists.我预计wildards只是工作,因为他们工作的优良所有类似的方法在FileSystemObject:CopyFile,CopyFolder,MoveFile,MoveFolder,DeleteFile,DeleteFolderGet*文件名处理方法一样GetAbsolutePathName.

当然有办法解决这个问题,比如GetFolder迭代它的文件.但FileExists本来会更具可读性,方便性,自然性和一致性.

fs.FileExists不一致感觉就像一个API设计问题.可能是什么原因?背后有什么想法吗?

vbscript api-design filesystemobject

2
推荐指数
1
解决办法
2618
查看次数

是否可以下载音频文件并使用React Native Expo播放它?

我将音频文件托管在服务器上,我希望我的应用程序在身份验证后可以访问。用户发送包含身份验证令牌的GET请求,然后服务器返回二进制音频数据。

据我所知,没有办法将此“ blob”作为音频文件保存到文件系统。当前在react-native中实现的抓取功能不支持Blob:link

...而且expo也不支持理想的react-native-fetch-blob库:link

此外,我看不到任何从服务器流式传输音频文件的方法。包含有expo的音频库允许从URL(例如http://example.com/myaudio.mp3)流式传输音频,但是我看不到将授权标头附加到请求的任何方法(例如“ Authorization”:“不记名[我的令牌]“)。

是否可以通过下载和保存音频Blob或从包含请求中包含授权标头的URL进行流传输来实现此目的?我可以将项目与世博会分离,但我想把它留作最后的手段。

authentication api-design react-native fetch-api expo

2
推荐指数
1
解决办法
2165
查看次数