Say the client is requesting the following URL:
/user-details?user=123
If /user-details
was a non-existing resource, the correct status code would obviously be 404
.
However if /user-details
does exist, but no user with id 123
exists:
- I've so far returned a
404 Not Found
, but experience has told me that it makes it confusing to not know whether it is the resource, or the entity that was not found; - I've considered using
400 Bad Request
, but I find it confusing as well, as the request is technically correct, just requesting a non-existing entity.
Is there a more suitable HTTP status code for this purpose?
The 404 is fine because the user-details resource is a conceptual mapping to the user entity in this case to a partial user resource information.
The GET method for user-details is therefore not responsible for differentiating from the two cases: a) The user doesn't exist, b) The user details don't exist.
I would however rewrite the endpoint to something like this:
Which in my opinion is more expressive.
Try 422 which is used in WebDav? See http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
For me 404 status is ok too (better normed actually), 400 is too vague.
The
user
parameter is part of the resource identifier as stated in RFC 3986, section 3.4:Hence,
404/Not found
is perfectly fine.