Код состояния для «ресурс никогда не будет доступен в этом случае» - PullRequest
1 голос
/ 27 марта 2019

У меня есть REST API, работающий со счетами.Теперь каждый счет имеет специальный «список платежей» после его финансирования.Хотя не все предназначены для финансирования.У меня есть конечная точка, которая предоставляет информацию об этом списке платежей для каждого счета.Таким образом, если счет был профинансирован, он возвращает 200, если счет еще не был профинансирован (поэтому ресурс еще не доступен, но будет), я возвращаю 202, но что, если счет не предназначен для финансирования (ресурс недоступен и никогдабудет в этом случае)?

Я думал об использовании:

2xx - не удалось найти код, который бы соответствовал ситуации

3xx - не согласен с «клиент должен предпринять дополнительные действия для выполнения запроса»

4xx - не согласен с «ситуациями, в которых ошибка, по-видимому, была вызвана клиентом» *

5xx - не согласен с «сервером не удалось выполнить запрос»

Есть идеи?Спасибо!

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

У меня есть конечная точка, которая предоставляет информацию об этом списке платежей для каждого счета.Таким образом, если счет был профинансирован, он возвращает 200, если счет еще не был профинансирован (поэтому ресурс еще не доступен, но будет), я возвращаю 202, но что, если счет не предназначен для финансирования (ресурс недоступен и никогдабудет в этом случае)?

Важно понять в REST, что метаданные (коды состояния, заголовки) описывают ресурсы (документы), а не объекты домена.

Иногда эта идея выражается«ваша модель ресурсов - это не модель вашего домена».

Предполагается, что клиент, зависящий от вашего домена, просматривает полезные данные ответов;метаданные описывают независимость от домена самого ресурса гипермедиа, так что общие компоненты (браузеры, кэши, прокси, пауки) могут внести свой вклад.

Другой способ выразить ту же идею: то, что мы действительно делаем,отправка сообщений туда и обратно.Сообщение для конкретного домена клиента входит в полезную нагрузку;вот где вы будете сообщать клиенту, что происходит со счетом.Метаданные используются для описания таких вещей, как «как долго должно кэшироваться это конкретное сообщение?»

Если бы я разрабатывал ваш API, большинство ответов использовали бы 200 OK в качестве кода состояния;со случайным 404 Not Found, когда кажется, что в целевом URI может быть орфографическая ошибка.

(вероятно, я бы не использовал 202 Принято , как вы описали это, в качествесемантика означает что-то другое - 202 гораздо ближе к «Я понял ваш запрос, но мне потребуется некоторое время, чтобы подготовить документ»)

1 голос
/ 27 марта 2019

Прежде всего, важно подчеркнуть, что коды состояния предназначены для указания результата попытки сервера понять и удовлетворить запрос клиента.

Итак, если ресурс недоступен означает, что такой ресурс не существует (следовательно, для такого ресурса не может быть найдено представление), тогда 404 - вполне разумный выбор :

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

Из вашего вопроса я могу понять, что не предназначено для финансирования не означает, что представление для такого ресурса не существует. Итак, если ресурс существует (и для него есть представление), то 200 кажется вполне подходящим:

Код состояния 200 (OK) указывает на успешное выполнение запроса.

0 голосов
/ 27 марта 2019

Согласно https://tools.ietf.org/html/rfc7231#section-6.5.4:

Код состояния 404 (не найден) указывает, что исходный сервер не нашел текущее представление для целевого ресурса или не желает раскрыватьэтот существует.Код состояния 404 не указывает, является ли это отсутствие представления временным или постоянным; код состояния 410 (Прошёл) предпочтительнее, чем 404, если исходный сервер знает [...] , что условие может быть постоянным.

А также:

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

Итак, если у вас есть ресурс, похожий на /invoice/123/feelist, и этот ресурс никогда не будет доступен, то самое близкое, что вы можете получить, это 410, потому что 404 не имеет никаких указаний относительно того, является ли условие постояннымили нет.

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