休息 API:404、422 或 500?
RestApi: 404, 422 or 500?
假设我们有两个对象。 post
和 comment
。 post
有 n-comment
个。
如果我想获得(或更改)comment
或 post
,那么我也可以执行
[DELETE, GET, PATCH] posts/{postId}/comments/{commentId}
而不是
[DELETE, GET, PATCH] GET comments/{commentId}
但是...当服务器注意到给定的 commentId
退出,但有另一个 postId
时,如客户端请求所述,那是什么情况?那是...
- 404(未找到)- 因为完整路径不存在。
- 422(不可处理的实体)- 因为语法正确,但语义不正确。
- 500(内部服务器错误)- 因为这是意外情况,请参阅 (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500)。
肯定是客户端错误,所以正确的状态码应该在4xx
范围内。
当无法为给定的 URI 找到资源表示时,服务器将 return 带有 404
状态代码的响应:
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
.
假设我们有两个对象。 post
和 comment
。 post
有 n-comment
个。
如果我想获得(或更改)comment
或 post
,那么我也可以执行
[DELETE, GET, PATCH] posts/{postId}/comments/{commentId}
而不是
[DELETE, GET, PATCH] GET comments/{commentId}
但是...当服务器注意到给定的 commentId
退出,但有另一个 postId
时,如客户端请求所述,那是什么情况?那是...
- 404(未找到)- 因为完整路径不存在。
- 422(不可处理的实体)- 因为语法正确,但语义不正确。
- 500(内部服务器错误)- 因为这是意外情况,请参阅 (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500)。
肯定是客户端错误,所以正确的状态码应该在4xx
范围内。
当无法为给定的 URI 找到资源表示时,服务器将 return 带有 404
状态代码的响应:
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
.