我应该为UPDATE(PUT)和DELETE设置什么状态代码(例如产品成功更新)?
UPDATE
PUT
DELETE
对于把请求:HTTP200,HTTP204应该意味着“资源更新成功”。HTTP201如果把请求创建了一个新资源。
对于删除请求:HTTP200或HTTP204应该意味着“资源已成功删除”。
HTTP202也可以由任一操作返回,这意味着指令已被服务器接受,但尚未完全应用。操作稍后可能会失败,因此客户端不应完全假设它成功了。
一个客户端收到一个它无法识别的状态码,但它以2开头,应该将其视为200 OK。
PUT如果修改了现有资源,则应发送200(OK)或204(No Content)响应代码以指示成功完成请求。
如果修改了现有资源,则应发送200(OK)或204(No Content)响应代码以指示成功完成请求。
删除如果响应包含描述状态的实体,则成功响应应为200(OK),如果操作尚未制定,则为202(接受),如果操作已制定但响应不包括实体,则为204(无内容)。
删除
如果响应包含描述状态的实体,则成功响应应为200(OK),如果操作尚未制定,则为202(接受),如果操作已制定但响应不包括实体,则为204(无内容)。
来源:IETF:RFC-9110方法定义
HTTP 200 OK:成功HTTP的标准响应实际答复将取决于使用的请求方法。HTTP 204无内容:服务器成功处理了请求,但没有返回任何内容
HTTP 200 OK:成功HTTP的标准响应实际答复将取决于使用的请求方法。
HTTP 204无内容:服务器成功处理了请求,但没有返回任何内容
来源:HTTP状态代码列表:2xx成功
RFC 2616描述了使用哪些状态码。
不,它总是没有 200。
简短的回答:对于PUT和DELETE,您应该发送200(OK)或204(No Content)。
长答案:这是一个完整的决策图(点击放大)。
来源:https://github.com/for-GET/http-decision-diagram
除了200和204,205(重置内容)可能是一个有效的响应。
服务器已经完成了请求,用户代理应该重置导致请求被发送的文档视图…[例如]清除给出输入的表单。
以下是一些Tips:
200(如果您想在响应中发送一些其他数据)或204(推荐)。202删除的操作尚未提交。如果没有要删除的内容,请使用204或404(DELETE操作是幂等的,删除已删除的项目是操作成功,因此您可以返回204,但幂等并不一定意味着相同的响应)其他错误:400错误请求(语法错误或错误的查询是奇怪,但可能)。401未授权认证失败403禁止:授权失败或无效的应用程序ID。405不允许.当然。409资源冲突可以在复杂的系统中实现。和501,502在错误的情况下。
200(如果您想在响应中发送一些其他数据)或204(推荐)。
202删除的操作尚未提交。
如果没有要删除的内容,请使用204或404(DELETE操作是幂等的,删除已删除的项目是操作成功,因此您可以返回204,但幂等并不一定意味着相同的响应)
其他错误:
把
如果要更新集合的元素200/204与上面删除的原因相同。202如果操作尚未提交。引用的元素不存在:PUT可以是201(如果你创建了元素,因为这是你的行为)404如果您不想通过PUT创建元素。400错误请求(格式错误的语法或错误的查询比DELETE更常见)。401未授权403禁止:身份验证失败或无效的应用程序ID。405不允许。当然。409资源冲突可以在复杂的系统中实现,如DELETE。422不可处理实体它有助于区分“错误请求”(例如格式错误的XML/JSON)和无效字段值和501,502在错误的情况下。
如果要更新集合的元素
引用的元素不存在:
PUT可以是201(如果你创建了元素,因为这是你的行为)
404如果您不想通过PUT创建元素。
400错误请求(格式错误的语法或错误的查询比DELETE更常见)。
401未授权
403禁止:身份验证失败或无效的应用程序ID。
405不允许。当然。
409资源冲突可以在复杂的系统中实现,如DELETE。
422不可处理实体它有助于区分“错误请求”(例如格式错误的XML/JSON)和无效字段值
和501,502在错误的情况下。
由于问题深入到删除“应该”返回200和204,因此值得考虑的是,有些人建议返回带有链接的实体,因此首选项是200。
"API应该是有用的,而不是返回204(无内容)建议去的地方。在这个例子中,我认为一个明显的链接提供的是“somewhere.com/container/(减去资源)”-容器,其中客户端刚刚删除了一个资源。也许客户端希望删除更多的资源,所以这将是一个有用的链接。”
http://blog.ploeh.dk/2013/04/30/rest-lesson-learned-avoid-204-responses/
如果客户端遇到204响应,它可以放弃,转到API的切入点,还是回到以前的资源吧访问。这两种选择都不是特别好。
就我个人而言,我不会说204是错误的(作者也不会;他说“烦人”),因为客户端的良好缓存有很多好处。
2014年6月RFC7231废弃RFC2616。如果您正在通过HTTP执行REST,那么RFC7231准确描述了GET、PUT、POST和DELETE的预期行为
这里有一些状态码,你应该知道你的知识。
100继续101交换协议102处理103早期提示
200好的201创建202接受203非权威信息204无内容205重置内容206部分内容207多重身份208已举报226IM使用
300多项选择301永久移动302找到303查看其他304未修改305使用代理306SwitchProxy307临时重定向308永久重定向
400错误请求401未授权402需要付款403禁止404未找到405方法不允许406不可接受407需要代理身份验证408请求超时409冲突410不见了411所需长度412前置条件失败413有效载荷过大414URI过长415不支持的媒体类型416范围不满意417期望落空418我是个茶壶420方法失败421错误定向的请求422不可处理的实体423锁定424依赖失败426需要升级428是否必填先决条件429请求太多431请求标头字段太大451因法律原因无法使用
500内部服务器错误501未执行502坏门户503服务不可用504网关超时505不支持Http版本506变量也谈判507存储不足508检测到环路510未扩展511需要网络认证
{"VALIDATON_ERROR": {"code": 512,"message": "Validation error"},"CONTINUE": {"code": 100,"message": "Continue"},"SWITCHING_PROTOCOLS": {"code": 101,"message": "Switching Protocols"},"PROCESSING": {"code": 102,"message": "Processing"},"OK": {"code": 200,"message": "OK"},"CREATED": {"code": 201,"message": "Created"},"ACCEPTED": {"code": 202,"message": "Accepted"},"NON_AUTHORITATIVE_INFORMATION": {"code": 203,"message": "Non Authoritative Information"},"NO_CONTENT": {"code": 204,"message": "No Content"},"RESET_CONTENT": {"code": 205,"message": "Reset Content"},"PARTIAL_CONTENT": {"code": 206,"message": "Partial Content"},"MULTI_STATUS": {"code": 207,"message": "Multi-Status"},"MULTIPLE_CHOICES": {"code": 300,"message": "Multiple Choices"},"MOVED_PERMANENTLY": {"code": 301,"message": "Moved Permanently"},"MOVED_TEMPORARILY": {"code": 302,"message": "Moved Temporarily"},"SEE_OTHER": {"code": 303,"message": "See Other"},"NOT_MODIFIED": {"code": 304,"message": "Not Modified"},"USE_PROXY": {"code": 305,"message": "Use Proxy"},"TEMPORARY_REDIRECT": {"code": 307,"message": "Temporary Redirect"},"PERMANENT_REDIRECT": {"code": 308,"message": "Permanent Redirect"},"BAD_REQUEST": {"code": 400,"message": "Bad Request"},"UNAUTHORIZED": {"code": 401,"message": "Unauthorized"},"PAYMENT_REQUIRED": {"code": 402,"message": "Payment Required"},"FORBIDDEN": {"code": 403,"message": "Forbidden"},"NOT_FOUND": {"code": 404,"message": "Not Found"},"METHOD_NOT_ALLOWED": {"code": 405,"message": "Method Not Allowed"},"NOT_ACCEPTABLE": {"code": 406,"message": "Not Acceptable"},"PROXY_AUTHENTICATION_REQUIRED": {"code": 407,"message": "Proxy Authentication Required"},"REQUEST_TIMEOUT": {"code": 408,"message": "Request Timeout"},"CONFLICT": {"code": 409,"message": "Conflict"},"GONE": {"code": 410,"message": "Gone"},"LENGTH_REQUIRED": {"code": 411,"message": "Length Required"},"PRECONDITION_FAILED": {"code": 412,"message": "Precondition Failed"},"REQUEST_TOO_LONG": {"code": 413,"message": "Request Entity Too Large"},"REQUEST_URI_TOO_LONG": {"code": 414,"message": "Request-URI Too Long"},"UNSUPPORTED_MEDIA_TYPE": {"code": 415,"message": "Unsupported Media Type"},"REQUESTED_RANGE_NOT_SATISFIABLE": {"code": 416,"message": "Requested Range Not Satisfiable"},"EXPECTATION_FAILED": {"code": 417,"message": "Expectation Failed"},"IM_A_TEAPOT": {"code": 418,"message": "I'm a teapot"},"INSUFFICIENT_SPACE_ON_RESOURCE": {"code": 419,"message": "Insufficient Space on Resource"},"METHOD_FAILURE": {"code": 420,"message": "Method Failure"},"UNPROCESSABLE_ENTITY": {"code": 422,"message": "Unprocessable Entity"},"LOCKED": {"code": 423,"message": "Locked"},"FAILED_DEPENDENCY": {"code": 424,"message": "Failed Dependency"},"PRECONDITION_REQUIRED": {"code": 428,"message": "Precondition Required"},"TOO_MANY_REQUESTS": {"code": 429,"message": "Too Many Requests"},"REQUEST_HEADER_FIELDS_TOO_LARGE": {"code": 431,"message": "Request Header Fields Too"},"UNAVAILABLE_FOR_LEGAL_REASONS": {"code": 451,"message": "Unavailable For Legal Reasons"},"INTERNAL_SERVER_ERROR": {"code": 500,"message": "Internal Server Error"},"NOT_IMPLEMENTED": {"code": 501,"message": "Not Implemented"},"BAD_GATEWAY": {"code": 502,"message": "Bad Gateway"},"SERVICE_UNAVAILABLE": {"code": 503,"message": "Service Unavailable"},"GATEWAY_TIMEOUT": {"code": 504,"message": "Gateway Timeout"},"HTTP_VERSION_NOT_SUPPORTED": {"code": 505,"message": "HTTP Version Not Supported"},"INSUFFICIENT_STORAGE": {"code": 507,"message": "Insufficient Storage"},"NETWORK_AUTHENTICATION_REQUIRED": {"code": 511,"message": "Network Authentication Required"}}
通常,200 OK和201 Created最适合成功的PUT请求。
200 OK
201 Created
对于DELETE方法,202 Accepted和204 No Content将是最佳选择。
202 Accepted
204 No Content