让我们说有一个带订单的产品.如果您要求/ products/product_id,如果product_id不存在,它将返回404.但是,如果此产品没有订单或者它应该返回一个空数组,/ products/product_id/orders应返回404吗?
难道要考虑好的做法,以重新使用RFC HTTP状态代码这个样子,或者我们应该组成新的恰好映射到我们具体的错误原因是什么?
我们正在围绕几个遗留应用程序设计一个Web服务API.
除了响应主体中的JSON/XML数据结构之外,我们还希望返回对Web缓存和开发人员有意义的HTTP状态代码.
但是,如何将不同类别的错误映射到适当的HTTP状态代码?团队中的每个人都同意以下内容:
如果1234不存在,则GET/package/1234返回404 Not Found
如果"next_checkpoint" 和 1234有效请求,则GET/package/1234/next_checkpoint返回400 Bad Request,但next_checkpont在这里没有意义......
等等......但是,在某些情况下,事情需要比"400"更具体 - 例如:
POST/dispatch /?for_package = 1234返回412 Precondition如果/ dispatch和package 1234都存在则失败,但是1234尚未准备好进行调度.
我有一个小困境.
如果您有以下URI端点:
/item
/item/{id}
Run Code Online (Sandbox Code Playgroud)
如果我发出GET请求,/item我希望这样:
<Items>
<Item>...</Item>
<Item>...</Item>
...
</Items>
Run Code Online (Sandbox Code Playgroud)
如果我向/ item/{id}发出GET请求,我希望这样:
<Item>
...
</Item>
Run Code Online (Sandbox Code Playgroud)
我的一些团队成员争辩说我们应该设计API,这样当有人为/ item/{id}进行GET时,它应该作为单个元素的集合返回.像这样:
<Items>
<Item>...</Item>
</Items>
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不对.你也觉得不对吗?请解释原因,因此我可能会说服自己使用资源的永久包装版本或我的同伴开发人员使用非包装的单一资源.