REST 中成功的 DELETE 语句的 HTTP 状态返回码是啥?
Posted
技术标签:
【中文标题】REST 中成功的 DELETE 语句的 HTTP 状态返回码是啥?【英文标题】:What is the HTTP status return code for a successful DELETE statement in REST?REST 中成功的 DELETE 语句的 HTTP 状态返回码是什么? 【发布时间】:2015-06-15 06:04:59 【问题描述】:我正在研究如何使用 Spring 处理 REST Web 服务(但我不知道它是否是与 Spring 相关的答案,或者更笼统地说它仅与 REST 概念有关)。
所以我的疑问是:成功的 DELETE 语句的 HTTP 状态返回码到底是什么?
是 204 还是 200?
我知道 200 表示我的请求已正确满足,但在网上阅读时,在我看来,我希望 在成功 GET 返回内容之后而不是之后删除。
某处我发现204状态是在之后获得的 成功的 PUT 或 DELETE。这是真的吗?看不懂,就是说response是空的,为什么一个空respons就代表PUT或者DELETE操作已经成功了?
【问题讨论】:
200 - 成功响应/204- 没有正文的成功响应。这几乎是普遍适用的,无论操作如何。 另见... ***.com/questions/2342579/… 【参考方案1】:一个空的响应体并不意味着删除成功,一个成功的删除(通常)意味着响应体是空的。
没有官方的 RESTful API 状态代码列表,但大多数人认为 204 是成功删除的良好响应代码,因为通常没有充分的理由在删除某些内容后返回响应正文。
一般来说,如果操作成功并且响应体为空返回204。如果操作成功并且响应体不为空,则返回200
【讨论】:
(迂腐,也许,但我不得不不同意第一句话。)【参考方案2】:空响应不表示操作成功,HTTP 错误代码应该指示成功/失败,响应正文可能包含也可能不包含数据。
响应正文可能包含有关请求的附加信息,例如,要显示到 UI 的特定消息、有关信息的统计信息或时间信息等。但它必须这样做,并且身体的目的是提供信息/诊断(如果存在)。
【讨论】:
【参考方案3】:2xx 代表请求成功。 xx 只是让您更具体地了解发生了什么(服务器做了什么或正在返回什么)。
【讨论】:
【参考方案4】:对于每种方法的正确 HTTP 状态码没有严格的规定。这取决于具体发生了什么,需要向客户发送什么信息等。我可以想到几个例子:
一个成功的DELETE
,没有更多信息。 204 No Content
一个成功的DELETE
,但是你有一个关于应该删除的相关孤立资源的警告。 200 OK
.
您接受了DELETE
请求,但可能需要很长时间,并且您将异步执行此操作。客户应稍后检查。 202 Accepted
.
您接受了 DELETE
请求,但无法删除资源,而是将 URI 重置为默认值。 205 Reset Content
.
【讨论】:
此外,如果您的响应数据使用错误代码 200 或 202 为空,则在 javascript 中“then”将不会接受您的响应已完成。以上是关于REST 中成功的 DELETE 语句的 HTTP 状态返回码是啥?的主要内容,如果未能解决你的问题,请参考以下文章
REST模式中HTTP请求方法(GET,POST,PUT,DELETE)
REST-API,无效 DELETE 的正确 HTTP 状态代码
使用 REST 处理 HTTP Get/Delete Android