REST API 中不存在的资源的适当 HTTP 状态代码?

问题描述 投票:0回答:1

我正在设计一个 REST API 服务器应用程序,尝试为资源不存在时的服务器响应建立规则。虽然我们可以在团队内部定义内部代码,但关于 HTTP 状态代码存在争议。

考虑端点 POST /a (body: { "bid": 123 })。此端点用于创建用户拥有的“a”资源。在创建过程中,需要“b”资源,因此“b”的 id 作为有效负载包含在正文中。但是,如果'b'中没有id=123的资源,是否应该将其视为404 Not Found?

我非常感谢您对 REST 原则和约定的见解。如果能提供RFC等官方文档的参考就更好了

目前我选择了404 not found。但我的团队说这是错误的。什么是正确的?

rest http http-status-code-404 http-status-codes
1个回答
0
投票

但是,如果'b'中没有id=123的资源,这是否应该被视为404 Not Found?

可能不是。

关键思想:HTTP 状态代码是 transfer-documents-over-a-network 域的元数据,它们用于描述对通用组件(浏览器、代理等)的响应的性质,以便那些组件可以做有趣的事情。


在您描述的情况下,请求中肯定存在问题,因此一些 4xx 客户端错误是适当的。

然而,

404 表示目标资源没有当前表示。 目标资源是由请求行中的请求目标标识的资源。

简单来说,发送 404 响应意味着 HTTP 请求所请求资源的 URI 存在拼写错误。

在你的例子中:

POST /a HTTP/1.1

目标资源是由

/a
标识的资源。消息的该部分是正确的:请求目标的拼写确实与您的请求处理器的标识符匹配;因此 404 响应具有误导性。

您想要的是暗示请求bodyregistered状态代码之一,而不是请求target

422 不可处理的内容更适合。

© www.soinside.com 2019 - 2024. All rights reserved.