Какой HTTP код возврата в запросе на пустой результат 204 или 404? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть вызов с возвращаемым объектом, но этот вызов может вернуть пустой результат.

Мой URL в контроллере:

/api/find-by-id/{id}

Этот контроллер выполняет вызовы следующим образом:

service.findById(Integer id);

Мой сервис ищет через DAO:

repository.findById(Integer id); 

Когда DAO возвращает пустое значение, я должен отправить ошибку HTTP 404 или HTTP 204 на фронт?

Учитывая:

  • 2xx: Успех - Theдействие было успешно получено, понято и принято

  • 4xx: ошибка клиента - запрос содержит неверный синтаксис или не может быть выполнен

HTTP 204: Означает, что что-то было найдено, но оно пустое.

HTTP 404: не найдено.

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Если вы вызываете API и результат пустой, код по-прежнему равен 202 или 204, если вы хотите каталогизатора,

, когда вы выполняете запрос и не существует, это 404, наиболее распространенный вбитая, неработающая или неправильная ссылка.

ваш контроллер или службы должны выполнить действие, когда установлено значение 204, например, перенаправление на страницу 404.

0 голосов
/ 05 октября 2018

Какой HTTP-код возврата в запросе на пустой результат 204 или 404?

Возможно, полезная аналогия - представьте себе поиск файла в файловой системе.

  • Если я найду файл, и его длина равна нулю байтов -> 204.
  • Если я вообще не найду файл -> 404.

204 конкретно описывает содержимое тела ответа;что тело имеет длину 0 байтов.Так что 204 не подходит, например, если вы отправляете представление приложения / json пустого объекта.

{}

Вместо этого вы должны использовать один из других кодов ответа 2xx (вероятно, 200).

404 : «Я не могу его найти - вы правильно написали URL?»

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

Шаблон хранилища был описан Эвансом как предоставление вызывающего кода с иллюзией, что все объектыхранятся в коллекции памяти.Так что, если «пустое значение» означает «идентификатор не соответствует элементу в коллекции», тогда 404 - хороший выбор.

Если идентификатор действительно получил элемент, но тело ответа имеет длину в ноль байтов (потому что элемент пустой или что-то еще), тогда 204 - хороший выбор.

0 голосов
/ 05 октября 2018

Если ваш findById всегда возвращает ровно 0 или 1 элемент, и это ваш запрос:

GET /api/find-by-id/{id}

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

204 отличается.На самом деле это не означает, что элемент не существует, это означает, что операция прошла успешно, но результат пустой + клиент для гипермедиа не должен обновлять текущее представление.Он редко используется в качестве ответа на запрос GET, потому что это не имеет особого смысла.

Поскольку звучит так, как будто вы используете базу данных, эквивалент 204 / empty будет базой данныхзапись с этим идентификатором, но все поля null.Эквивалентом 404 будет то, что запись базы данных вообще не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...