Код состояния API для запроса поста, который не удался - PullRequest
1 голос
/ 26 апреля 2019

У меня есть вызов post api, который в настоящее время создает встречу в моей системе бронирования.

Если вызов api отправляет запрос на встречу и api может успешно создать назначение, api возвращает 201 созданный код состояния.

В настоящее время, если запрос на встречу не создан (из-за различных вещей, таких как время больше не доступно или комната используется в настоящее время), API возвращает код состояния 400 неверных запросов.

"Код состояния ответа 400 неверный запрос указывает, что сервер не может или не будет обрабатывать запрос из-за чего-то, что воспринимается как ошибка клиента" *

Отправленные данные не являются недействительным синтаксисом и потенциально могут быть повторно отправлены.и быть успешным.

Существует ли более соответствующий код состояния для этой ошибки при создании ресурса.будет ли 422 Unprocessable Entity правильным ответом в этом случае?

Ответы [ 3 ]

3 голосов
/ 26 апреля 2019

409 может удовлетворить этот вариант использования (и мои личные предпочтения):

"Запрос не может быть выполнен из-за конфликта с текущим состоянием целиресурс. Этот код используется в ситуациях, когда пользователь может разрешить конфликт и повторно отправить запрос. "

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

422 также может указывать на ошибку на уровне поля.

В любом случае важно сопровождать ее хорошим сообщением об ошибке, указывающимпроблема.От rfc7231:

сервер ДОЛЖЕН послать представление, содержащее объяснение ситуации ошибки, и является ли это временным или постоянным условием.Эти коды состояния применимы к любому методу запроса.

0 голосов
/ 26 апреля 2019

[...], если запрос на встречу не создан (из-за различных вещей, таких как время больше не доступно или комната используется в настоящее время) [...]

Коды состояния предназначены для указания результата попытки сервера понять и удовлетворить запрос клиента. Учитывая, что это ошибка клиента, наиболее подходящий код состояния будет находиться в диапазоне 4xx.

Для ситуации, описанной в вашем вопросе, вы можете использовать 409:

6.5.8. Конфликт 409

Код состояния 409 (Конфликт) указывает, что запрос не может быть будет завершено из-за конфликта с текущим состоянием цели ресурс. Этот код используется в ситуациях, когда пользователь может в состоянии разрешить конфликт и повторно отправить запрос. Сервер СЛЕДУЕТ генерировать полезную нагрузку, которая включает в себя достаточно информации для пользователя признать источник конфликта. [...]


400 против 422

Как правило, используйте 400, чтобы указать синтаксис ошибки в полезной нагрузке или недопустимые параметры в URL. И используйте 422, чтобы указать семантические проблемы в полезной нагрузке. Посмотрите, как определяется каждый код состояния:

6.5.1. 400 Неверный запрос

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

11,2. 422 необработанных объекта

Код состояния 422 (Unprocessable Entity) означает, что сервер понимает тип содержимого объекта запроса (отсюда 415 (неподдерживаемый тип носителя) код состояния не подходит), и синтаксис объекта запроса является правильным (таким образом, 400 (Bad Request) код статуса не подходит), но не удалось обработать содержимое инструкции. Например, это условие ошибки может возникнуть, если XML Тело запроса содержит правильно сформированный (т.е. синтаксически правильный), но семантически ошибочные инструкции XML.

Также рассмотрите коды состояния, возвращаемые известным GitHub API v3 API:

Существует три возможных типа ошибок клиента при вызовах API, которые Получите запросы тел:

  1. Отправка неверного JSON приведет к ответу 400 Bad Request. [...]

  2. Отправка неверного типа значений JSON приведет к 400 Bad Request response. [...]

  3. Отправка неверных полей приведет к ответу 422 Unprocessable Entity. [...]


Майкл Кропат собрал набор диаграмм , что очень полезно для выбора наиболее подходящего кода состояния. См. Следующую диаграмму для 4xx кодов состояния:

Picking the right 4xx status code

0 голосов
/ 26 апреля 2019

Если ошибка связана с тем, что на сервере что-то идет не так, и не по вине клиента, вы можете использовать диапазон 5xx (Ошибка сервера).4xx ошибки зарезервированы для ошибок, вызванных клиентом.Чаще всего в этом случае используется 500 Internal Server Error.

Итак:

  • Ошибка клиента -> 4xx

  • Ошибка сервера -> 5xx

...