在REST中,成功的DELETE语句的HTTP状态返回码是什么?

54

我正在学习如何使用Spring处理REST Web服务(但我不知道这是否与Spring相关,或者更普遍地说,它只与REST概念相关)。

因此,我的疑问是:对于成功的DELETE语句,HTTP状态返回码到底是什么?

204还是200

我知道200表示我的请求已正确完成,但在网上阅读时,似乎是我期望在成功获取内容后返回而不是在删除之后。

我在某处发现204状态是在成功进行PUT或DELETE之后获得的。这是真的吗?我无法理解,这意味着响应为空,为什么一个空的响应意味着PUT或DELETE操作成功执行了?


3
200 - 成功响应/ 204 - 成功响应但没有返回内容。这几乎是普适的,无论进行何种操作。 - kolossus
请参阅... https://dev59.com/AnE95IYBdhLWcg3wXcvd - SteveC
4个回答

101

对于每个方法使用哪种HTTP状态码并没有严格的规定,这取决于具体发生了什么、需要向客户端发送什么信息等。以下是几个例子:

  • 成功的DELETE请求,但没有更多信息可返回。 204 No Content

  • 成功的DELETE请求,但您需要警告有关应该一同删除的相关孤立资源。 200 OK

  • 您接受了DELETE请求,但可能需要很长时间,而您将异步地执行它。 客户端应稍后检查它。 202 Accepted

  • 您接受了DELETE请求,但该资源无法删除,因此URI将重置为默认值。 205 Reset Content


此外,如果您的响应数据为空并使用错误代码200或202,则在JavaScript中,“then”将不会接受您的响应作为已完成。 - SirtusKottus

10
一个空的响应体并不意味着删除成功,成功的删除(通常)意味着响应体为空。
RESTful API没有官方的状态码列表,但大多数人认为204是一个成功的删除响应代码,因为在删除某些东西后通常没有理由返回响应体。
一般来说,如果操作成功且响应体为空,则返回204。如果操作成功且响应体不为空,则返回200。

(有点迂腐,但我不同意第一句话。) - Dave Newton

3

一个空的响应并不意味着操作成功,HTTP错误代码应该指示成功/失败,并且响应正文可能包含或不包含数据。

响应正文可能包含关于请求的其他信息,例如要显示给UI的特定消息,有关信息的统计或时间信息,等等。但它不是必须的,如果存在,则正文的目的是提供信息和诊断。


2

2xx代表请求成功。 xx只是让您更具体地了解发生了什么(服务器做了什么或返回的内容)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接