【发布时间】:2017-07-16 19:21:34
【问题描述】:
通常,我们使用 POST 在服务器端创建资源。
因此,理想情况下,如果一切正常,服务器应该以201 Created HTTP 状态响应,或者在异步操作的情况下以202 Accepted HTTP 状态响应。
是否存在 POST 请求可以返回 200 OK HTTP 状态的有效场景?
或者我们不应该对 POST 请求使用200 OK HTTP 状态?
【问题讨论】:
通常,我们使用 POST 在服务器端创建资源。
因此,理想情况下,如果一切正常,服务器应该以201 Created HTTP 状态响应,或者在异步操作的情况下以202 Accepted HTTP 状态响应。
是否存在 POST 请求可以返回 200 OK HTTP 状态的有效场景?
或者我们不应该对 POST 请求使用200 OK HTTP 状态?
【问题讨论】:
我认为 200 是对 Internet 上 POST 请求的非常常见的响应。用起来就好了。
来自RFC 7231:
6.3.1。 200 确定
200(OK)状态码表示请求成功。 在 200 响应中发送的有效负载取决于请求方法。
对于本规范定义的方法,其预期含义
有效载荷的大小可以概括为:获取目标资源的表示;
HEAD 与 GET 相同的表示,但没有 表示 数据;
POST 状态的表示,或从中获得的结果, 行动;
PUT、DELETE 表示动作的状态;
OPTIONS 表示通信选项;
TRACE 代表接收到的请求消息 结尾 服务器。
以及第 4.3.3 节:
对 POST 请求的响应仅在包含以下内容时才可缓存 明确的新鲜度信息(参见 [RFC7234] 的第 4.2.1 节)。 但是,POST 缓存并未得到广泛实施。对于情况下, 源服务器希望客户端能够缓存一个结果 以一种可以被以后的 GET 重用的方式 POST,源服务器可以 发送包含结果和 Content-Location 的 200(OK)响应 与 POST 的有效请求具有相同值的标头字段 URI(第 3.1.4.2 节)。
【讨论】:
是的,您可以返回200 Ok HTTP 状态,但您应该返回响应BODY。
一般来说,根据您的 API 要求,我们有 3 个选项:
返回201 Created HTTP 状态,带有EMPTY BODY。
如果您不需要返回响应正文。
返回200 Ok HTTP 状态,带有BODY。
如果您需要返回响应正文 [包含已创建的资源]。
返回202 Accepted HTTP 状态,带有EMPTY BODY。
以防操作将排队。
【讨论】: