2014-01-18 3 views
2

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

Http: ПОЛУЧИТЬ URL: api.mysite.com/users/123

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

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

+0

404 точно! Прочтите документацию jeresy, пример 404: * Если имя пользователя не совпадает с ответом 404 (Not Found). * Https://jersey.java.net/documentation/latest/user-guide.html – MariuszS

ответ

2

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

10.4.5 404 Не найдено

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

+0

Ваша вторая ссылка фактически * противоречит * ваш ответ ... – brandonscript

+0

Нет, прочитайте ответ на этот вопрос. – MariuszS

+0

@MariuszS Что делать, если у меня есть URL-адрес, например https://api.mysite.com/users, который должен возвращать коллекцию пользователей. Но в моем тесте http я включаю {«hair»: «green»}, который я использую, чтобы выбирать только пользователей с зелеными волосами. Какой код статуса я верну? Это будет 404, или это будет 200 с пустым возвратом. Я смущен, потому что параметр hair: green не является частью URL-адреса, но он является частью тела http. – Gilberg

1

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

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

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

+0

Нет, это действительно неправильно. HTTP-коды должны использоваться для ответов HTTP-транспорта - 200 OK не представляет * данные или данные *, это означает * успешный ответ *. 404 означает * не найден *, как в * конечной точке *, которую вы пытаетесь достичь, не найден. – brandonscript

+1

@remus Это служба отдыха с определенным контентом, а не с веб-страницей. Если контент не существует, то 404 является лучшим сообщением для клиента. – MariuszS

+1

@MariuszS нормально, тогда как бы вы различали * конечную точку * не нашли и * без содержимого * с тем же кодом HTTP? – brandonscript