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、HTTP DELETE 和参数

REST-API,无效 DELETE 的正确 HTTP 状态代码

使用 REST 处理 HTTP Get/Delete Android

如何使用 HttpClient 将带有 JSON 的 DELETE 发送到 REST API

typescript Angular HTTP Rest API GET,POST,PUT,DELETE