What would be the correct HTTP status to return when I am performing the POST request to create a new user, but one of its parameters is incorrect - the company id I am including with the user data doesn't exist in the database.
POST data: {username: 'newuser', age: 99, company_id: 34}
the company with id 34 does not exist in the database.
I was thinking whether that could be:
404: “The requested resource was not found.” This is the most common error message of them all. This code means that the requested resource does not exist, and the server does not know if it ever existed.
If the target resource does not have a current representation and the PUT successfully creates one, then the origin server MUST inform the user agent by sending a 201 (Created) response.
404 Not Found: This response code occurs when the server cannot find the resources being requested by the client.
The HTTP 404 Not Found response status code indicates that the server cannot find the requested resource.
400
or 422
First of all, keep in min that it's a client error, so 5xx
status codes are not suitable here. You should pick a 4xx
status code then.
The most obvious options are 400
and 422
:
400
.422
to indicate that the request entity cannot be processed by the server.See the following quote from the RFC 4918 (for your situation, just read JSON when it says XML):
11.2. 422 Unprocessable Entity
The
422
(Unprocessable Entity) status code means the server understands the content type of the request entity (hence a415
(Unsupported Media Type) status code is inappropriate), and the syntax of the request entity is correct (thus a400
(Bad Request) status code is inappropriate) but was unable to process the contained instructions. For example, this error condition may occur if an XML request body contains well-formed (i.e., syntactically correct), but semantically erroneous, XML instructions.
A similar situation was addressed in this answer.
For example purposes, the GitHub API v3 also returns 422
if the content of the payload contains invalid values (but is syntactically valid):
There are three possible types of client errors on API calls that receive request bodies:
Sending invalid JSON will result in a
400 Bad Request
response. [...]Sending the wrong type of JSON values will result in a
400 Bad Request response
. [...]Sending invalid fields will result in a
422 Unprocessable Entity
response. [...]
Michael Kropat put together a set of diagrams that's pretty insightful when it comes to picking the most suitable status code. See the following diagram for 4xx
status codes:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With