http - RestApi:404、422 还是 500?
问题描述
假设我们有两个对象。post
和comment
。post
有ns comment
。
如果我想获得(或更改) acomment
的 apost
那么我也可以做 an
[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 的资源表示时,服务器应返回带有404
状态代码的响应:
(
404
未找到)状态码表示源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。[...]
422
状态代码旨在指示语法上有效但语义上无效的有效负载。
例如,假设您有一个端点来创建评论,并且有效负载应包含该评论所属的帖子的标识符:
POST /comments HTTP/1.1
Host: example.org
Content-Type: application/json
{
"content": "Awesome post!",
"postId": 1
}
在这种情况下,如果postId
引用了一个不存在的帖子,服务器应该返回422
.
推荐阅读
- excel - 创建字符串的变体数组(数字或字符串的混合数据)
- php - Jquery 和 Ajax 不将数据发布到或加载 PHP 页面
- arraylist - 在处理中将表行转换为数组列表
- php - PHP 我需要在 php 日期函数中做这个时间戳
- outlook - MAC 上的 Outlook Web 加载项,Office.context.mailbox.makeEwsRequestAsync 不起作用
- c - 当 x 为 NaN 或 inf 时,为什么 floor、ceil 实现返回 x + x?
- javascript - 反应:TypeError:this.props.courses.map 不是函数
- python - 模块“tensorflow.contrib.seq2seq”没有属性“simple_decoder_fn_train”
- javascript - JS区分数组中的对象和基元
- c# - 无法过滤以字符串形式存储在 Mongo DB 中的日期列