2014-01-24 1 views
2

mvc web api call, как GetEmployees ищет список объектов-сотрудников, но не находит их. Это не условие ошибки, поскольку в бизнес-контексте допустимо, что список может быть пустым.Возврат Notofound status code или пустой список с кодом статуса 200, когда действие поиска не находит элементов в asp.net web api call?

Поиск не провалился, он ничего не нашел.

Каков наилучший способ формирования ответа? Должен ли я

  1. возвращение сообщение ответа с HTTP кодом состояния HttpStatusCode.NotFound или
  2. код 200 состояния возврата и возвращает пустой список, или
  3. что-то еще?

ответ

4

По возвращении 404 вы говорите, что запрашиваемый ресурс недоступен, например GET /Emplyees/42, где работник с этим идентификатором не существует.

Ваша коллекция сотрудников существует, это просто пусто, поэтому 404 будет неуместным.

См RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1:

Сервер ничего совпадающий с Request-URI не найден.

Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content:

Код состояния 404 (Не найдено) указывает на то, что исходный сервер не нашел текущее представление для целевого ресурса или не желает раскрывать, что она существует.

REST: Mapping 404 HTTP Status codes:

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

Таким образом, вы можете рассмотреть возможность возврата 204 No Content или 200 с пустым телом или ответом, указывающим пустую коллекцию ,

+1

Можете ли вы более подробно указать, что вы * будете защищать (что, я полагаю, будет вариантом OPs 2, но ваш текущий ответ не делает его полностью понятным) –

+0

http://stackoverflow.com/questions/13366730/правильный-rest-response-for-empty-table –

+0

@ MateuszMigała http://softwareengineering.stackexchange.com/questions/270821/do-web-applications-use-http-as-a-transport-layer-or-do -они-кол-в-ан-встр – CodeCaster

Смежные вопросы