我应该为UPDATE
( PUT
) 和DELETE
(例如产品成功更新)设置什么状态代码?
10 回答
对于PUT请求:HTTP 200,HTTP 204应该暗示“资源更新成功”。如果PUT请求创建了新资源,则返回HTTP 201 。
对于DELETE请求:HTTP 200或HTTP 204应暗示“资源已成功删除”。
HTTP 202也可以由任一操作返回,这意味着该指令已被服务器接受,但尚未完全应用。稍后操作可能会失败,因此客户端不应完全假设它是成功的。
接收到它无法识别但以 2 开头的状态代码的客户端应将其视为 200 OK。
如果修改了现有资源,则应发送 200(OK)或 204(No Content)响应代码以指示请求成功完成。
如果响应包含描述状态的实体,则成功的响应应该是 200(OK),如果操作尚未制定,则为 202(已接受),如果操作已经制定但响应不包括,则应为 204(无内容)一个实体。
HTTP 200 OK:成功的 HTTP 请求的标准响应。实际响应将取决于使用的请求方法。
HTTP 204 No Content:服务器成功处理了请求,但没有返回任何内容
简短回答:对于 PUT 和 DELETE,您应该发送 200(OK)或 204(No Content)。
长答案:这是一个完整的决策图(点击放大)。
这里有一些提示:
删除
200(如果您想在响应中发送一些额外的数据)或204(推荐)。
202删除的操作尚未提交。
如果没有什么要删除的,就用204 或者 404(DELETE操作是幂等的,删除一个已经删除的项是操作成功,所以可以返回204,但确实幂等不一定表示同样的响应)
其他错误:
- 400 Bad Request(格式错误的语法或错误的查询很奇怪,但可能)。
- 401 未经授权的身份验证失败
- 403 Forbidden : 授权失败或无效的应用程序 ID。
- 405 不允许。当然。
- 409 资源冲突在复杂系统中是可能的。
- 和501 , 502以防出错。
放
如果您要更新集合的元素
- 200/204的原因与上面的 DELETE 相同。
- 202如果操作尚未提交。
引用的元素不存在:
PUT 可以是201(如果您创建了元素,因为那是您的行为)
404如果您不想通过 PUT 创建元素。
400 错误请求(格式错误的语法或错误查询比 DELETE 更常见)。
401 未经授权
403 Forbidden : 身份验证失败或无效的应用程序 ID。
405 不允许。当然。
409 资源冲突在复杂系统中可能发生,例如在 DELETE 中。
422 Unprocessable entity它有助于区分“错误请求”(例如格式错误的 XML/JSON)和无效的字段值
和501 , 502以防出错。
RFC 2616 描述了要使用的状态码。
不,它并不总是 200。
除了 200 和 204 之外,205(重置内容)可能是有效响应。
服务器已经完成了请求,并且用户代理应该重置导致请求被发送的文档视图... [例如] 清除给出输入的表单。
这是一些状态代码,您应该根据自己的知识了解。
1XX 信息回复
- 100 继续
- 101 交换协议
- 102 处理
- 103 早期提示
2XX 成功
- 200 好
- 201 已创建
- 202 接受
- 203 非权威信息
- 204 无内容
- 205 重置内容
- 206 部分内容
- 207 多状态
- 208 已举报
- 226 IM 已使用
3XX 重定向
- 300 多项选择
- 301 永久搬家
- 302 找到
- 303 查看其他
- 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 期望失败
- 418 我是个茶壶
- 420 方法失败
- 421 错误的请求
- 422 无法处理的实体
- 423 锁定
- 424 依赖失败
- 426 需要升级
- 428 需要先决条件
- 429 请求过多
- 431 请求标头字段太大
- 451 因法律原因不可用
5XX 服务器错误
- 500 内部服务器错误
- 501 未实施
- 502 错误网关
- 503 服务不可用
- 504 网关超时
- 505 不支持 Http 版本
- 506 Varient 也协商
- 507 存储空间不足
- 508 检测到环路
- 510 未扩展
- 511 需要网络身份验证
由于问题深入探讨了DELETE “应该”是否返回200与204,因此值得考虑的是,有些人建议返回带有链接的实体,因此首选是200。
“而不是返回 204(无内容),API 应该有帮助并建议去的地方。在这个例子中,我认为提供的一个明显链接是“ 'somewhere.com/container/'(减去'资源') “-客户刚刚从中删除资源的容器。也许客户希望删除更多资源,所以这将是一个有用的链接。
http://blog.ploeh.dk/2013/04/30/rest-lesson-learned-avoid-204-responses/
如果客户端遇到 204 响应,它可以放弃,转到 API 的入口点,或者返回它访问的上一个资源。这两种选择都不是特别好。
就我个人而言,我不会说 204 是错误的(作者也没有;他说“烦人”),因为客户端的良好缓存有很多好处。最好的方式是保持一致。
{
"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
请求。
对于DELETE
方法,202 Accepted
将204 No Content
是最好的选择。