Rest API设计;动作端点
假设我有一个设备,它将连接到服务器并通过API注册/传输数据 我知道你会有这样的事情:Rest API设计;动作端点,rest,api,http,Rest,Api,Http,假设我有一个设备,它将连接到服务器并通过API注册/传输数据 我知道你会有这样的事情: GET: api/devices GET: api/devices/:id POST api/devices DELETE: api/devices/:id 这些是典型CRUD端点的示例 但是,我应该在哪里添加端点来检查该设备是否允许与其工厂ID连接 我一直在考虑以设备ID的形式传递一个带有API键的post字段,但这会弄乱HTTP谓词 因此,我认为最好的方法是添加如下参数: GET: api/device
GET: api/devices
GET: api/devices/:id
POST api/devices
DELETE: api/devices/:id
这些是典型CRUD端点的示例
但是,我应该在哪里添加端点来检查该设备是否允许与其工厂ID连接
我一直在考虑以设备ID的形式传递一个带有API键的post字段,但这会弄乱HTTP谓词
因此,我认为最好的方法是添加如下参数:
GET: api/devices/:id?id=something
但这对于这个端点来说是多余的
所以问题是,;如何成功识别自己的设备?听起来您只是在寻找一种进行身份验证的方法。查看
授权
标题及其各种身份验证方案。如果现有的身份验证方案不适合您的需要,您还可以使用自己的身份验证方案进行扩展。常见的是Basic
、Digest
和Bearer
。供应商扩展的一个例子是AWS是的,本质上可以归结为这一点。我想我觉得这有点不同,因为我不是在寻找一个典型的API密钥/机密系统,因为我自己编写了客户端程序。但是谢谢,我要看看那些@NathanPrins即使你自己设计客户,你也可能会遇到其他人已经遇到过的类似模式;)对这些东西重新使用现有的标准可能也会给你带来额外的好处,比如必须编写更少的代码或依赖其他人的文档。是的,我知道这一点,这是程序员工作的一半哈哈。但在这种情况下,大多数API都要求您注册一个应用程序,您将收到一个密码,并使用appname和密码进行身份验证。但在这种情况下,我不希望人们必须注册他们自己的设备,但我希望设备持有“工厂”的某个密钥,这表明他们实际上是合法客户,而不是第三方。。“基本的、消化的等等都没有解决这个问题。还是我遗漏了什么?”内森普林斯。如果有一些“工厂密钥”,你可以很好地散列这个密钥,这样它就变得不可用了,你可以直接使用它作为承载令牌。使用承载令牌不需要完整的OAuth2流。这在@NathanPrins中是有意义的