DesirePRG
DesirePRG

Reputation: 6378

Is it correct to return 200 Ok HTTP status for a POST request?

Usually, we use POST to create a resource on the server-side.
So ideally if everything goes right, the server should respond either with a 201 Created HTTP status or in case of an asynchronous operation with 202 Accepted HTTP status.

Is there any valid scenario where a POST request can be returning a 200 OK HTTP status?
Or should we never use 200 OK HTTP status for a POST request?

Upvotes: 13

Views: 30796

Answers (2)

Ahmed Nabil
Ahmed Nabil

Reputation: 18986

Yes, You can return 200 Ok HTTP status, but you SHOULD return a response BODY.

In general, we have 3 options according to your API requirements:

  1. Return 201 Created HTTP status, with EMPTY BODY.
    In case you don't need to return a response body.

  2. Return 200 Ok HTTP status, with BODY.
    In case you need to return a response body [containg created resource].

  3. Return 202 Accepted HTTP status, with EMPTY BODY.
    In case the action will be queued.

Upvotes: 5

cshu
cshu

Reputation: 5944

I see 200 as a very common response to POST requests on internet. It's fine to use it.

From RFC 7231:

6.3.1. 200 OK

The 200 (OK) status code indicates that the request has succeeded. The payload sent in a 200 response depends on the request method.
For the methods defined by this specification, the intended meaning
of the payload can be summarized as:

GET a representation of the target resource;

HEAD the same representation as GET, but without the representation data;

POST a representation of the status of, or results obtained from, the action;

PUT, DELETE a representation of the status of the action;

OPTIONS a representation of the communications options;

TRACE a representation of the request message as received by the end server.

And section 4.3.3:

Responses to POST requests are only cacheable when they include explicit freshness information (see Section 4.2.1 of [RFC7234]). However, POST caching is not widely implemented. For cases where an origin server wishes the client to be able to cache the result of a POST in a way that can be reused by a later GET, the origin server MAY send a 200 (OK) response containing the result and a Content-Location header field that has the same value as the POST's effective request URI (Section 3.1.4.2).

Upvotes: 13

Related Questions