2010-12-02 4 views
11

Наша команда разрабатывает приложения RESTFul ... мы обсуждаем подход «ЛУЧШАЯ ПРАКТИКА».REST: Сопоставление 404 HTTP-кодов состояния

Должно ли возвращаться ответ кода состояния 404 для фильтра-подобного запроса? Скажем, мой GET URL является

.../1 ​​/ услуги/StartsWith/a.json

и возвращает все значения, которые начинаются с А в моей базе данных ... но если нет значения «а» не найдены должен ли я просто вернуть код состояния 200 с пустой json-строкой? или код состояния 404.

Спасибо!

ответ

15

См. Вопрос this, в обновлении к моему ответу я адресую вашу проблему. Конкретно этот бит,

Я думаю, ответ на ли возвращение 404 зависит от того, что является ресурс, который будет получен. Is Это результат поиска результата, или является представителем продукта ? Чтобы это узнать, вам действительно нужно найти , чтобы посмотреть на связь, которая привела нас к URL-адресу .

Если URL должен возвращать представление продукта затем 404 должен быть возвращен, если код не существует . Если URL возвращает поиск результат, то он не должен возвращать 404.

Конечным результатом является то, что то, что URL выглядит не является определяющим фактором . Сказав это, существует соглашение о том, что строки запроса используются , чтобы возвращать результаты поиска, поэтому более интуитивно понятен для использования этого стиля URL , когда вы не хотите возвращать 404s.

+5

Да, я согласен с Даррелем. Просто «нет результатов» является действительным результатом поиска. Ресурс существует, его представление просто «пусто». Таким образом, 404 не оправдано. Просьба указать конкретный ресурс с помощью идентификатора (/ customers/123), который не существует, гарантирует 404. Это не запрос, это скорее «разыменование» указателя. – 2010-12-02 23:59:33

3

Возможно, более разумно вернуть код 204, что означает «Нет содержимого». Это было бы немного более эффективно, так как статус 204 не может иметь никакого содержимого документа, плюс вы можете обнаружить код вместо того, чтобы анализировать ответ.