问题
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?
回答1:
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:
/user/123/details
Which in my opinion is more expressive.
回答2:
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.
回答3:
The user
parameter is part of the resource identifier as stated in RFC 3986, section 3.4:
The query component contains non-hierarchical data that, along with data in the path component (Section 3.3), serves to identify a resource within the scope of the URI's scheme and naming authority
Hence, 404/Not found
is perfectly fine.
来源:https://stackoverflow.com/questions/20922543/correct-http-status-code-for-existent-resource-but-non-existent-entity