更新和删除的HTTP状态代码?
我应该为更新和删除的HTTP状态代码?,http,http-status-codes,Http,Http Status Codes,我应该为UPDATE(PUT)和DELETE(例如产品成功更新)设置什么状态代码?对于PUT请求:HTTP 200或HTTP 204应该表示“资源更新成功” 对于DELETE请求:http200或http204应表示“资源已成功删除”HTTP 202也可以返回,这意味着该指令已被服务器接受,并且“资源已标记为删除” 如果修改了现有资源,则应发送200(确定)或204(无内容)响应代码,以指示请求成功完成 如果响应包括描述状态的实体,则成功响应应为200(正常);如果行动尚未实施,则成功响应应
UPDATE
(PUT
)和DELETE
(例如产品成功更新)设置什么状态代码?对于PUT请求:HTTP 200或HTTP 204应该表示“资源更新成功”
对于DELETE请求:http200或http204应表示“资源已成功删除”HTTP 202也可以返回,这意味着该指令已被服务器接受,并且“资源已标记为删除”
如果修改了现有资源,则应发送200(确定)或204(无内容)响应代码,以指示请求成功完成
如果响应包括描述状态的实体,则成功响应应为200(正常);如果行动尚未实施,则成功响应应为202(已接受);如果行动已实施,但响应不包括实体,则成功响应应为204(无内容)
资料来源:
HTTP 200正常:成功HTTP的标准响应
请求。实际反应将是
取决于所使用的请求方法
HTTP 204无内容:服务器已成功处理请求,但未返回任何内容
资料来源:RFC2616描述了
不,不总是200。简短回答:对于PUT和DELETE,您应该发送200(确定)或204(无内容) 详细回答:这是一个完整的决策图(点击放大)
来源:除了200和204之外,可能是有效的响应 服务器已完成请求,用户代理应重置导致发送请求的文档视图。。。[例如]清除输入的形式 以下是一些提示: 删除
- 200(如果您希望在响应中发送一些附加数据)或204(推荐)
- 202删除的操作尚未提交
- 如果没有要删除的内容,请使用204或404(删除操作是幂等的,删除已删除的项目是成功的操作,因此可以返回204,但幂等并不一定意味着相同的响应)
- 400错误的请求(语法错误或错误的查询很奇怪,但也有可能)
- 401未经授权的身份验证失败
- 403禁止:授权失败或应用程序ID无效
- 405不允许。当然
- 409复杂系统中可能存在资源冲突
- 如果出现错误,501,502
- 200/204原因与上述删除相同
- 202如果操作尚未提交
- PUT可以是201(如果您创建元素是因为这是您的行为)
- 404如果不想通过PUT创建元素
- 400错误请求(语法错误或错误查询比删除更常见)
- 401未经授权
- 403禁止:身份验证失败或应用程序ID无效
- 405不允许。当然
- 409资源冲突在复杂系统中是可能的,如DELETE
- 422不可处理实体它有助于区分“错误请求”(例如格式错误的XML/JSON)和无效字段值
- 如果出现错误,501,502
由于该问题深入探讨了如果DELETE“应该”返回200vs204,因此值得考虑的是,有些人建议返回带有链接的实体,因此首选200 “API应该是有帮助的,并且 建议去的地方。在这个例子中,我认为一个明显的链接 提供的是“'somewhere.com/container/”(减去'resource')”—用于 客户端刚刚删除了一个资源。可能客户端希望 删除更多资源,这将是一个有用的链接。” 如果客户端遇到204响应,它可以放弃,转到 API的入口点,或返回到它之前的资源 参观。这两种选择都不是特别好 就个人而言,我不会说204是错误的(作者也不会说,他说“令人讨厌”),因为客户端良好的缓存有很多好处。最好的方法是保持一致。2014年6月,RFC2616被淘汰。 如果您正在通过HTTP执行REST,那么将准确描述GET、PUT、POST和DELETE的预期行为。以下是一些状态代码,您应该了解这些代码以了解您的知识。 1XX信息回复
- 100继续
- 101交换协议
- 102处理
- 103早期提示
- 200正常
- 201已创建
- 202已接受
- 203非权威信息
- 204无内容
- 205重置内容
- 206部分内容
{
"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"
}
}