休息 API:404、422 或 500?

RestApi: 404, 422 or 500?

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

如果我想获得(或更改)commentpost,那么我也可以执行
[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)。

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


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

6.5.4. 404 Not Found

The 404 (Not Found) status code indicates that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. [...]


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

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

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

{
  "content": "Awesome post!",
  "postId": 1
}

在这种情况下,如果 postId 引用不存在的 post,服务器应该 return 422.