为 POST 请求返回 200 Ok HTTP 状态是否正确?

Des*_*PRG 11 api post http

通常,我们使用 POST 在服务器端创建资源。
所以理想情况下,如果一切顺利,服务器应该以201 CreatedHTTP 状态响应,或者在异步操作的情况下以HTTP 状态响应202 Accepted

是否有任何有效的 POST 请求可以返回200 OKHTTP 状态的场景?
或者我们永远不应该200 OK对 POST 请求使用HTTP 状态?

csh*_*shu 6

我认为 200 是对 Internet 上 POST 请求的一种非常常见的响应。使用它就好了。

来自RFC 7231

6.3.1. 200 正常

200 (OK) 状态码表示请求成功。200 响应中发送的负载取决于请求方法。
对于本规范定义的方法,
有效载荷的预期含义可以概括为:

获取目标资源的表示;

HEAD 与 GET 相同的表示,但没有表示数据;

POST 表示动作的状态或从动作中获得的结果;

PUT、DELETE 表示动作的状态;

OPTIONS 表示通信选项;

跟踪终端服务器接收到的请求消息的表示。

和第 4.3.3 节:

对 POST 请求的响应仅在包含明确的新鲜度信息时才可缓存(参见 [RFC7234] 的第 4.2.1 节)。但是,POST 缓存并未广泛实现。对于源服务器希望客户端能够以一种可以被稍后的 GET 重用的方式缓存 POST 结果的情况,源服务器可以发送包含结果和内容位置的 200(OK)响应与 POST 的有效请求 URI 具有相同值的标头字段(第 3.1.4.2 节)。

  • @DesirePRG 当然,为什么不呢?RESTful 是对远程 API 架构属性的描述。它甚至不需要使用 HTTP 来实现 RESTful,更不用说使用特定的返回码了。 (3认同)

ahm*_*l88 5

是的,您可以返回200 OkHTTP 状态,但您应该返回响应BODY

一般来说,我们根据您的 API 要求有 3 种选择:

  1. 返回201 CreatedHTTP 状态,并带有EMPTY BODY
    如果您不需要返回响应正文。

  2. 返回200 OkHTTP 状态,带有BODY
    如果您需要返回响应正文[包含创建的资源]。

  3. 返回202 AcceptedHTTP 状态,并带有EMPTY BODY
    如果操作将排队。