RestApi:404、422或500?

时间:2019-03-14 15:11:45

标签: http http-error

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

如果我想获取(或更改)comment中的post,那么我也可以进行
[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)。

1 个答案:

答案 0 :(得分:2)

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


当找不到给定URI的资源表示形式时,则服务器应返回状态为404的响应:

  

6.5.4. 404 Not Found

     

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


422状态码用于指示有效载荷,该有效载荷在语法上有效,但在语义上无效。

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

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

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

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