如何定义一个布尔API RESTful?

时间:2015-05-04 23:00:47

标签: rest http api-design

我必须定义一个API来回答是否可以创建具有给定ID的资源,例如

  

我可以(调用方)使用id = resource1创建此资源吗?

可能的回答可能是

  • 401 - 来电者未经过身份验证
  • 403 - 呼叫者已通过身份验证但未获得执行此检查的授权
  • 200 - 是的,您可以使用id = resource1
  • 创建资源
  • ...

现在我的问题是

  1. 如何为API建模? 威尔,GET /resources/resource1是个不错的选择吗?

  2. 将为响应设置哪些HTTP代码,例如 (a)此资源ID已被占用,(b)您无权创建此特定ID(但只有少数其他ID),(c)您可以创建此ID。

3 个答案:

答案 0 :(得分:3)

github中的一个例子可以帮助你。

api旨在检查用户是否关注其他用户:

GET /user/following/:username

交易信息显示在github's api document

对于你的问题1,我认为你可以这样实现:

GET /resource/existence/:resource_id

对于问题2,您还可以查看github's client errors

答案 1 :(得分:1)

尝试使用 POST 创建资源会更好吗?让你的实现从那里处理响应?在这种情况下,您的回答可能是:

a)409:冲突 b)401:未经授权的 c)200:好的

如果这不可行,那么我猜您 GET 的有效负载响应可以包含结果。简单的事情:

true :您可以创建资源
false :您无法创建资源

答案 2 :(得分:0)

由于您要检查有关添加的权限,因此应使用与实际添加元素的资源不同的资源。 IMO类似于/permissions/{elementName}?id=theid/permissions/{elementName}/{operationName}?id=theid。使用方法GET访问它会很合适。

我认为使用相同的资源会有点“混乱”,因为我希望GET上的方法/resources/resource1能够实际返回标识符为ressource1的元素的内容。 / p>

关于回复,我会看到:

  • 401如果用户不是身份验证且权限资源需要身份验证。
  • 204如果允许当前用户添加具有指定标识符的元素。在这种情况下,我认为您不需要响应有效负载。
  • 关于不允许用户添加带有提供的标识符的元素的情况,我认为状态代码403Forbidden)适合。如果您认为用户提供了错误的内容,则状态代码400也可能匹配。在这种情况下,应在响应有效负载内返回有关错误的一些提示(标识符值不允许)。

对我来说,状态代码409Conflict)在实现乐观锁定时更多,即对同一元素进行并发访问(更新)。

希望它能帮到你, 亨利