RestApi:404、422 还是 500?

use*_*157 2 http http-error

假设我们有两个对象。postcommentpost有 n- comments。

如果我想获取(或更改) acomment的 apost那么我也可以做 an
[DELETE, GET, PATCH] posts/{postId}/comments/{commentId}
而不是
[DELETE, GET, PATCH] GET comments/{commentId}

但是......当服务器注意到给定的存在commentId但有另一个postId如客户端请求所说的时,会发生什么?那是不是一个...

  1. 404(未找到)-因为完整路径不存在。
  2. 422(不可处理的实体)-因为语法是正确的,但语义不正确。
  3. 500(内部服务器错误)-因为这是意外情况,请参阅(https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500)。

cas*_*lin 5

这肯定是客户端错误,因此正确的状态代码应该在4xx范围内。


当无法找到给定 URI 的资源表示时,服务器应返回带有404状态代码的响应:

6.5.4. 404 未找到

(未找到)状态代码404表示源服务器未找到目标资源的当前表示或不愿意透露该表示的存在。[...]


状态代码422旨在指示语法上有效语义上无效的有效负载。

例如,假设您有一个端点来创建评论,并且有效负载应包含该评论所属帖子的标识符:

POST /comments HTTP/1.1
Host: example.org
Content-Type: application/json

{
  "content": "Awesome post!",
  "postId": 1
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果postId引用了不存在的帖子,服务器应该返回422