rest api ожидаемый ответ для GET

Я работаю над созданием rest api, и у меня есть вопрос о том, что обычно возвращается из get без совпадения. Например, если мой ресурс - «пользователи», и я выполняю вызов API с

http метод: ПОЛУЧИТЬ URL: api.mysite.com/users/123

Если существует «123», я верну http-код 200 с данными пользователя в теле ответа. Мой вопрос: какой http-код мне вернуть и что добавить в тело ответа, если нет пользователя с идентификатором 123?

Должен ли я просто вернуть код 200 и пустое тело?


person Gilberg    schedule 18.01.2014    source источник
comment
404 точно! Прочтите документацию Jeresy, есть пример для 404: Если имя пользователя не совпадает, будет получен ответ 404 (Not Found). jersey.java.net/documentation/latest/user-guide.html   -  person MariuszS    schedule 19.01.2014


Ответы (2)


Используйте 404, поскольку запрошенный ресурс (Пользователь) не существует.

10.4.5 404 не найдено

Сервер не нашел ничего, соответствующего Request-URI. Не указывается, является ли состояние временным или постоянным. Код состояния 410 (Gone) СЛЕДУЕТ использовать, если сервер знает через некоторый внутренне настраиваемый механизм, что старый ресурс постоянно недоступен и не имеет адреса пересылки. Этот код состояния обычно используется, когда сервер не желает точно раскрывать, почему запрос был отклонен, или когда другой ответ не применим. RFC 2616

person MariuszS    schedule 18.01.2014
comment
@MariuszS Что бы я сделал, если бы у меня был URL типа api.mysite.com/users, который предполагается чтобы вернуть коллекцию пользователей. Но в моем http-теле я включаю {hair: green}, который использую для выбора только пользователей с зелеными волосами. Какой код статуса я бы тогда вернул? Будет ли это 404 или 200 с пустым возвратом. Я сбит с толку, потому что параметр hair: green не является частью URL-адреса, но является частью тела http. - person Gilberg; 21.01.2014
comment
Пожалуйста, добавьте новый вопрос для этого. Обычно запрос для пользователей должен быть GET, со строкой запроса ?hair=green, а код статуса результата должен быть 200 с пустой коллекцией {}. - person MariuszS; 21.01.2014

Это ваш API, поэтому вы можете возвращать все, что хотите, но если вы говорили о стандарте HTTP-ответов, я бы посоветовал вам вернуть 404 (NOT FOUND) в этом случае, который выглядит более подходящим в этом случае. Потому что ресурс, к которому вы пытаетесь получить доступ, недоступен в этом месте.

404- Not Found означает, что сервер ничего не нашел. соответствие Request-URI.

С кодом состояния 404 вы также можете предоставить тело ответа или любой другой значимый заголовок с правильным сообщением об ошибке. Чтобы клиент мог это понять.

person Sachin    schedule 18.01.2014
comment
Нет, это действительно неправильно. Коды HTTP должны использоваться для ответов транспорта HTTP - 200 OK не представляет данные или данные, он представляет успешный ответ. 404 означает, что не найдено, поскольку в конечной точке, которую вы пытаетесь достичь, не найдено. - person brandonscript; 19.01.2014
comment
@remus Это служба отдыха с определенным содержанием, а не веб-страница. Если контент не существует, то для клиента лучше всего подходит сообщение 404. - person MariuszS; 19.01.2014
comment
@MariuszS, хорошо, тогда как бы вы отличили конечная точка не найдена и нет содержимого с тем же кодом HTTP? - person brandonscript; 19.01.2014
comment
404 полностью подходит, если ресурс, идентифицированный URI, не найден. Если конечная точка не найдена, вы ссылаетесь на службу, которая не поддерживает операцию (например, GET или POST) на этом конкретном URI, тогда соответствующий ответ будет 405 (метод запрещен) - person Tim Dean; 20.01.2014