提问人:amphi 提问时间:11/14/2023 更新时间:11/14/2023 访问量:33
REST API 中不存在的资源的适当 HTTP 状态代码?
appropriate HTTP status code for non-existent resources in REST API?
问:
我正在设计一个 REST API 服务器应用程序,试图在资源不存在时为服务器响应建立规则。虽然我们可以在团队中定义内部代码,但关于 HTTP 状态代码存在争议。
考虑端点 POST /a (body: { “bid”: 123 })。此终结点用于创建用户拥有的“a”资源。在创建过程中,需要“b”资源,因此“b”的 id 作为有效负载包含在正文中。但是,如果“b”中没有 id=123 的资源,则是否应将其视为 404 Not Found?
我将不胜感激您从REST原则和约定中获得的见解。如果您能提供对 RFC 等官方文档的引用,那就更好了。
目前我选择了 404 未找到。但我的团队说这是错误的。什么是正确的?
答:
但是,如果“b”中没有 id=123 的资源,则是否应将其视为 404 Not Found?
可能不是。
关键思想:HTTP 状态代码是 transfer-documents-over-a-network 域的元数据,它们用于描述对通用组件(浏览器、代理等)的响应性质,以便这些组件可以做有趣的事情。
在您描述的情况下,请求中肯定存在问题,因此一些 4xx 客户端错误是合适的。
但是,404 表示目标资源没有当前表示形式。目标资源是由请求行中的请求目标标识的资源。
简单地说,发送 404 响应意味着 HTTP 请求在所请求资源的 URI 中存在拼写错误。
在您的示例中:
POST /a HTTP/1.1
目标资源是由 标识的资源。消息的这一部分是正确的:请求目标的拼写确实与请求处理器的标识符匹配;因此,404 的响应具有误导性。/a
您想要的是涉及请求正文的已注册状态代码之一,而不是请求目标。
422 不可处理的内容更适合。
评论