HTTP-код ответа для REST GET - подресурс не найден (но на него не ссылается идентификатор) - PullRequest
0 голосов
/ 25 мая 2019

Я создаю REST API и столкнулся с проблемой возврата кода ответа на операцию GET.Я нашел много примеров и ответов в Интернете, но не для моего конкретного сценария.Вот что я нашел и понял до сих пор:

  1. при возврате пустого списка (скажем / library / авторы / {authorId} / books ) пустого спискас кодом ответа 200 будет достаточно

  2. при запросе определенного ресурса с идентификатором (скажем / library / авторы / {authorId} / books / {bookId} )ответ будет пустым с 404

, который обобщает большинство моих вариантов использования, и я в порядке с ним.

Однако, что произойдет, если я получу доступ кресурс без идентификатора?

Например, ради аргументов, скажем, у автора может быть много книг, но только одна автобиография.У него либо есть, либо нет.Я не ожидаю, что пользователь передаст идентификатор автоматической биографии, потому что система может самостоятельно определить, существует ли она, конечная точка выглядит примерно так:

GET / library / авторы /{authorId} / auto-biography

Если автор существует, но у него нет автобиографии (это NULL), будет ли http-ответный код:

  • 204 (пустое содержимое)
  • 404 (ресурс не существует)

Заранее спасибо!

1 Ответ

1 голос
/ 25 мая 2019

Работа через семантику

GET /library/authors/1/auto-biography

/library/authors/1/auto-biography - это идентификатор. ресурс сам по себе является понятием, подобным "автобиографии автора 1";обратите внимание, что мы можем говорить о ресурсе, даже если он на самом деле еще не существует.

Ресурс может отображаться на пустой набор, что позволяет делать ссылки на концепцию до ее реализации.существует

В теле ответа HTTP появляется не ресурс, а представление ресурса.

Итак, давайте посмотрим накоды состояния

404

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

204

Код состояния 204 (без содержимого) указывает, что сервер успешно выполнил запроси что в теле полезных данных ответа нет дополнительного содержимого для отправки.

Свободная аналогия: предположим, вы пытаетесь получить содержимое файла.404 семантически выровнен с FileNotFound;204 указывает, что длина файла равна нулю.

404 обычно сопровождается «представлением, содержащим объяснение ситуации ошибки и является ли это временным или постоянным условием».Это указывает на то, что клиент пытался использовать ссылку, которая не должна была быть доступной.

204, с другой стороны, не имеет ничего - представление имеет нулевой байт, как это моглобыть данными.Это особый случай ответа 200, сообщающего клиенту (и промежуточным компонентам), что тело ответа намеренно оставлено пустым.

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