Вопрос

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:

/user/123/details

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:

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top