Какой код статуса HTTP подходит, когда запрос успешен, но имеет предупреждающие сообщения?

При правильном использовании REST, какой код статуса HTTP подходит, когда запрос успешен, но имеет предупреждающие сообщения?

В нашем случае; клиенты - это веб-приложения, работающие в браузерах. Мы предпочитаем коды состояния следующим образом:

  • HTTP 200, 201, 204, когда запрос успешно обработан
  • HTTP 422, когда запрос нарушает некоторые бизнес-правила
  • HTTP 500, когда возникают неожиданные исключения во время обработки запроса

Но мы не могли определить, какой код состояния следует использовать при успешной обработке запроса, но какую информацию или предупреждающие сообщения необходимо отправить клиенту?

3 ответа

Решение

В протоколе HTTP фактически есть заголовок "предупреждение" (см. Определения полей заголовка). Это HTTP-предупреждения, но вы можете использовать код 199 для отправки того, что вам нужно:

199 Разное предупреждение Текст предупреждения МОЖЕТ содержать произвольную информацию, которая должна быть представлена ​​пользователю или зарегистрирована.

Проблема здесь в следующем:

Система, получающая это предупреждение, НЕ ДОЛЖНА предпринимать какие-либо автоматические действия, кроме как представлять предупреждение пользователю.

Из-за этого, я думаю, вам лучше добавлять данные о предупреждении в содержание ответа (и продолжать использовать код состояния 200).

Коды состояния HTTP определяют, был ли запрос выполнен правильно или нет, и статус предупреждения отсутствует. Если вы хотите предоставить информацию о результатах ваших внутренних функций, вам следует добавить информацию о статусе ответа, например:

{
    status: "WARNING",
    code: "WARNING-CODE"
}

В аналогичном случае я использовал HTTP 418 (см. HTCPCP)

Клиентами были веб-приложения, использующие API Карт Google для отображения листов карты. И я хотел провести различие между намеренно пустой плиткой (нулевые данные -> пустая плитка с HTTP 200) и пустой плиткой, возникшей из-за пропущенных данных (нулевые данные -> пустая плитка с HTTP 418).

Возвращение 404 не позволило мне отправить плитку в теле ответа и поместило бы уродливые символы на карту. Но возвращение 418 по-прежнему позволяет получить тело ответа (возможно, из-за отсутствия серьезных определений стандартов, касающихся HTTP 418?), И в то же время предоставило код состояния, который я мог бы легко отфильтровать в журналах и т. Д. Для использования в диагностических целях.

Другие вопросы по тегам