我应为UPDATE
(PUT
)和DELETE
设置哪些状态代码(例如,产品已成功更新)?
答案 0 :(得分:1797)
对于 PUT 请求: HTTP 200 或 HTTP 204 应表示“资源已成功更新”。
对于 DELETE 请求: HTTP 200 或 HTTP 204 应表示“资源已成功删除”。还可以返回 HTTP 202 ,这意味着服务器已接受该指令并且“资源已被标记为删除”。
9.6 PUT
如果修改现有资源,则200(OK)或204(无内容)响应代码>应该被发送以表示请求的成功完成。
9.7删除
如果响应包括描述状态的实体,则成功响应应为200(OK),如果操作尚未执行,则应为202(已接受);如果已执行操作但响应为204(无内容)不包括实体。
来源:w3.org: HTTP/1.1 Method Definitions
HTTP 200 OK:成功HTTP的标准响应 要求。实际的反应会 取决于使用的请求方法。
HTTP 204无内容:服务器成功处理了请求,但未返回任何内容
答案 1 :(得分:791)
简短回答:对于PUT和DELETE,您应该发送200(OK)或204(No Content)。
答案很长:这是一个完整的决策图(点击放大)。
答案 2 :(得分:129)
以下是一些提示:
删除强>
200 (如果您想在响应中发送一些其他数据)或 204 (推荐)。
202 尚未提交删除的操作。
如果没有要删除的内容,请使用 204 或 404 (删除操作是幂等的,删除已删除的项目是< em>操作成功,所以你可以返回 204 ,但是,幂等并不一定意味着同样的响应)
其他错误:
- 400 错误请求(格式错误的语法或错误的查询奇怪但可能)。
- 401 未经授权身份验证失败
- 403 禁止:授权失败或应用程序ID无效。
- 405 不允许。肯定。
- 409 资源冲突可以在复杂系统中使用。
如果出现错误,- 501 , 502 。
<强> PUT 强>
如果您要更新集合的元素
- 200/204 ,原因与上面的DELETE相同。
- 202 如果尚未提交操作。
引用的元素不存在:
- PUT可以 201 (如果您创建了元素,因为这是您的行为)
404 如果您不想通过PUT创建元素。
400 错误请求(格式错误的语法或错误查询比DELETE更常见)。
- 401 未经授权
- 403 禁止:身份验证失败或应用程序ID无效。
- 405 不允许。肯定。
- 409 资源冲突可以在复杂系统中实现,例如在DELETE中。
- 422 无法处理的实体有助于区分“错误请求”(例如格式错误的XML / JSON)和无效字段值
如果出现错误,- 501 , 502 。
答案 3 :(得分:13)
RFC 2616描述了which status codes to use。
不,它不总是200。
答案 4 :(得分:9)
除了200和204之外,205 (Reset Content)可能是有效的回复。
服务器已完成请求,用户代理应该重置文档视图,导致请求被发送... [例如]清除输入的表单。
答案 5 :(得分:6)
由于问题深入研究 DELETE “应该”返回 200 vs 204 ,因此有些人建议您返回实体链接,因此首选项为 200 。
“API不应该返回204(无内容),而应该是有用的 建议去的地方。在这个例子中,我认为有一个明显的链接 提供是“'somewhere.com/container/'(减去'资源')” - 从哪个容器 客户端刚刚删除了一个资源。也许客户希望 删除更多资源,这将是一个有用的链接。“
http://blog.ploeh.dk/2013/04/30/rest-lesson-learned-avoid-204-responses/
如果客户遇到204响应,它可以放弃,转到 API的入口点,或者回到之前的资源吧 参观。这两种选择都不是特别好。
就我个人而言,我不会说204是错的(作者也没有;他说“讨厌”)因为客户端的良好缓存有很多好处。无论哪种方式都是最好的。
答案 6 :(得分:2)
答案 7 :(得分:1)
下面是一些状态代码,您应该以自己的知识来了解它们。
- 100 继续
- 101 交换协议
- 102 处理
- 103 早期提示
- 200 确定
- 201 已创建
- 202 已接受
- 203 非权威信息
- 204 没有内容
- 205 重置内容
- 206 部分内容
- 207 多状态
- 208 已报告
- 226 使用了IM
- 300 多项选择
- 301 永久移动
- 302 找到
- 303 查看其他
- 304 未修改
- 305 使用代理
- 306 切换代理
- 307 临时重定向
- 308 永久重定向
- 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 出于法律原因不可用
- 500 内部服务器错误
- 501 未实现
- 502 错误的网关
- 503 服务不可用
- 504 网关超时
- 505 不支持Http版本
- 506 变量也可以协商
- 507 存储空间不足
- 508 检测到循环
- 510 未扩展
- 511 需要网络身份验证
答案 8 :(得分:0)
超文本传输协议(HTTP / 1.1):语义和内容
答案 9 :(得分:0)
{
"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"
}
}
答案 10 :(得分:-1)
修改资源后,响应代码应 200(“OK”)。如果资源状态以更改URI的方式更改为资源(例如,重命名用户帐户),则响应代码为301(“永久移动”),并且Location头应提供新的URI。
删除对象时,响应代码应为200(“OK”)。
请点击以下链接了解更多详情 - status code for rest