首页 > 解决方案 > RestApi:404、422 还是 500?

问题描述

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

如果我想获得(或更改) 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)。

标签: httphttp-error

解决方案


这绝对是客户端错误,所以正确的状态码应该在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
}

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


推荐阅读