Answers:
404 NOT FOUND
似乎是适当的响应,因为具有该ID的资源不存在。理解起来很清楚,如果a/{id}
调用,您期望得到相同的响应。
409 CONFLICT
在我看来,这不是更好的选择,因为在您的示例中,当未找到父资源时,您将返回409 :)。
但是请记住,最重要的一点是API中的一致性
id
),则为404。但是,如果该文件夹在正文中传递,则可能是其他任何值(412、422……表示“验证失败:不存在”)。问和讨论是一个很好的问题。
除了@Dherik的答案。
URI是标识符,因此我们必须记住(/a/{id}/b
是标识符)。该URI是针对WWW毫无意义,因此对于HTTP客户端。
404是正确的答案。本质上,服务器正在应答
我没有找到具有此类ID的任何资源。找不到资源 1
丢失的资源是父母还是孩子都没有关系。
开发人员可以在URI中看到层次结构和路径,而HTTP客户端则看不到。换句话说,HTTP只能由HTTP客户端解释,而不能由人类(开发人员,最终用户等)来解释。
如有疑问,请不要问什么代码对您(人类)有意义。请问,什么代码对HTTP客户端有意义。您希望HTTP客户端的行为如何?
为什么?因为某些状态代码使这些客户端执行某些操作。例如302。此代码通常使Web浏览器重定向到响应标头中指定的特定位置(URI)。
这可能不是您的情况,但请务必注意。最终,HTTP状态代码被寻址到HTTP客户端。不适合我们的应用程序。不对人。
1:409很少被实现为导航错误。它通常涉及远程操作的执行(删除,更新,新建等)。但是URI应该存在。否则,将以404为准