我正在设计一个 REST API 服务器应用程序,尝试为资源不存在时的服务器响应建立规则。虽然我们可以在团队内部定义内部代码,但关于 HTTP 状态代码存在争议。
考虑端点 POST /a (body: { "bid": 123 })。此端点用于创建用户拥有的“a”资源。在创建过程中,需要“b”资源,因此“b”的 id 作为有效负载包含在正文中。但是,如果'b'中没有id=123的资源,是否应该将其视为404 Not Found?
我非常感谢您对 REST 原则和约定的见解。如果能提供RFC等官方文档的参考就更好了
目前我选择了404 not found。但我的团队说这是错误的。什么是正确的?
但是,如果'b'中没有id=123的资源,这是否应该被视为404 Not Found?
可能不是。
关键思想:HTTP 状态代码是 transfer-documents-over-a-network 域的元数据,它们用于描述对通用组件(浏览器、代理等)的响应的性质,以便那些组件可以做有趣的事情。
在您描述的情况下,请求中肯定存在问题,因此一些 4xx 客户端错误是适当的。
然而,404 表示目标资源没有当前表示。 目标资源是由请求行中的请求目标标识的资源。
简单来说,发送 404 响应意味着 HTTP 请求所请求资源的 URI 存在拼写错误。
在你的例子中:
POST /a HTTP/1.1
目标资源是由
/a
标识的资源。消息的该部分是正确的:请求目标的拼写确实与您的请求处理器的标识符匹配;因此 404 响应具有误导性。
您想要的是暗示请求body的registered状态代码之一,而不是请求target。
422 不可处理的内容更适合。