我应该为UPDATE(PUT)和DELETE(例如,产品成功更新)设置什么状态代码?
当前回答
由于这个问题探究了DELETE“应该”返回200而不是204,因此值得考虑的是,有些人建议返回带有链接的实体,因此首选200。
“与其返回204(无内容),API应该是有用的建议去哪里。在这个例子中,我认为provide是“'somewhere.com/container/'(减去'resource')”-容器客户端刚刚删除了一个资源。也许客户希望删除更多资源,这样将是一个有用的链接。"
http://blog.ploeh.dk/2013/04/30/rest-lesson-learned-avoid-204-responses/
如果客户机遇到204响应,它可以放弃或转到API的入口点,或返回到上一个资源访问。两种选择都不是特别好。
就我个人而言,我不会说204是错误的(作者也不会;他说“令人讨厌”),因为客户端的良好缓存有很多好处。最好是保持一致。
其他回答
简短回答:对于PUT和DELETE,您应该发送200(OK)或204(No Content)。
长答案:这是一个完整的决策图(点击放大)。
资料来源:https://github.com/for-GET/http-decision-diagram
通常,200 OK和201 Created最适合成功的PUT请求。
对于DELETE方法,202接受和204无内容将是最佳选择。
这是一些状态代码,您应该知道这些代码。
1XX信息响应
100继续101交换协议102处理103早期提示
2XX成功
200好201已创建202已接受203非权威信息204无内容205重置内容206部分内容207多状态208已报告226使用的IM
3XX重定向
300多种选择301永久移动找到302303参见其他304未修改305使用代理306交换机代理307临时重定向308永久重定向
4XX客户端错误
400错误请求401未授权402所需付款403禁止404未找到405不允许的方法406不可接受407需要代理身份验证408请求超时409冲突410消失411所需长度412前提条件失败413有效负载太大414 URI太长415不支持的媒体类型416范围不满足417预期失败我是茶壶420方法失败421误导请求422不可处理实体423锁定424失败的依赖项426需要升级428所需的前提条件429请求太多431请求标头字段太大451因法律原因不可用
5XX服务器错误
500内部服务器错误501未实施502坏网关503服务不可用504网关超时505 Http版本不受支持506变化也协商507存储不足508检测到循环510未扩展511需要网络认证
除了200和204之外,205(重置内容)可能是有效的响应。
服务器已完成请求,用户代理应重置导致发送请求的文档视图。。。[例如]清除输入的形式。
以下是一些提示:
删除
200(如果您想在响应中发送一些附加数据)或204(推荐)。202删除的操作尚未提交。如果没有要删除的内容,请使用204或404(delete操作是幂等的,删除已删除的项是操作成功的,因此可以返回204,但幂等并不一定意味着相同的响应)其他错误:400错误请求(格式错误的语法或错误的查询很奇怪,但可能)。401未授权身份验证失败403禁止:授权失败或应用程序ID无效。405不允许。当然409资源冲突在复杂系统中可能发生。以及501、502,以防出错。
PUT
如果要更新集合的元素200/204,原因与上述删除相同。202,如果操作尚未提交。引用的元素不存在:PUT可以是201(如果您创建了元素,因为这是您的行为)404如果您不想通过PUT创建元素。400错误请求(格式错误的语法或比DELETE更常见的错误查询)。401未授权403禁止:身份验证失败或应用程序ID无效。405不允许。当然409资源冲突在复杂系统中可能发生,如DELETE。422不可处理实体它有助于区分“错误请求”(例如格式错误的XML/JSON)和无效字段值以及501、502,以防出错。
推荐文章
- 如何使HTTP请求在PHP和不等待响应
- PATCH和PUT请求的主要区别是什么?
- 我可以把我所有的http://链接都改成//吗?
- URL为AJAX请求编码一个jQuery字符串
- 编译System.Net.HttpClient的查询字符串
- 摘要认证和基本认证的区别是什么?
- Axios -删除请求与请求体和头?
- 如何在http获取请求设置报头?
- 从Web Api控制器返回http状态代码
- 如何使用Ruby on Rails进行HTTP请求?
- REST API最佳实践:查询字符串中的参数vs请求体中的参数
- Express.js中的res.send和res.json的区别
- 如何评估http响应代码从bash/shell脚本?
- 如何从查询字符串读取值与ASP。网络核心?
- 302和307重定向有什么区别?