200 — это хорошо или это плохо? / Хабр

В этой трехминутной статье я хочу затронуть наболевшую тему.

Речь пойдет о статус коде HTTP 200 и ошибках в ответе.

HTTP/1.1 200 OK
{
  "error": {
    code: 2019,
    message: "Validation failed: field 'size' is invalid: the value is not a number"
  }
}

Нормально ли возвращать такой код, если возникла ошибка?

Нет? Да? Ну-ка давайте разберемся.

Случай 1. HTTP 200 и batch операция

Допустим отправляется один запрос. Запрос выполняется успешно. Возвращаем код 200. Ответ не содержит информации об ошибке. С этим случаем всё предельно просто и понятно. А что делать если требуется выполнить batch операцию?

Например, мы работаем с сервером изображений. Предоставляемый API позволяет загрузить за один запрос сразу несколько файлов.

Запрос выглядит примерно так:

{
  "sources": [
    {"image": "http://myserver. com/image1.jpg"},
    {"image": "http://myserver.com/image2.jpg"},
    {"video": "http://myserver.com/video.jpg"}
  ]
}

Предположим, по какой-то причине (например, кончилось место на сервере) видео загрузить не удалось. Что бы вы вернули в таком случае? 2xx или 4xx или 5xx? Сервер, отвечает примерно вот так:

HTTP/1.1 200 OK
{
  "results": [
    { "status": "ok", "id": 312 },
    { "status": "ok", "id": 313 },
    { "status": "fail", "error": "NO SPACE" }
  ]
}

Некоторые сервисы (и вполне известные) действуют также. Отвечают 200. А в ответе возвращают список команд, которые выполнить не получилось.

Случай 2. HTTP 200 и ошибки в ответе

Пришёл запрос. Запрос зафейлился. Например, мы забыли указать какое-то поле. Или дату отправили не в миллисекундах, а как строку. Тут-то точно не надо возвращать 200! Но увы и нет.

Где-то на просторах интернета я встречал проекты на github и bitbucket, которые специально предназначены для таких вот случаев. В них просто вшиты возможные варианты и шаблоны. Можно их достаточно легко встроить в свой проект и как бы быть готовым к разного рода «падениям» запросов. Но есть одно но.

В такие моменты твой код становится уродливым. Ты ему говоришь:

— Cлушай, у нас тут есть один внешний API. Он в целом нормальный. Только надо внимательно смотреть что в ответе приходит. Если там ответ содержит поле «error», то значит запрос сломался.

— Но ведь для этого же есть 4xx и 5xx! Да кто вообще так делает?!
— Тише-тише. Не надо так громко. Он может услышать. Пожалуйста, будь добрее к нему. И просто смотри не только на статус код, но и на ответ, пожалуйста.
— Ладно…

HTTP 200 — это просто статус

Ну 200 и 200. Ну не запилили. Или не успели. Или вообще не будут. Ну и что?! Написал json парсер и всё!

Как бы да, но я хочу знать почему. Забыли? Забили? Не успели? Не знали?

Возможно я что-то упускаю. Или не знаю.

Хочу ваше мнение. Срочно. Всем добра и выходных на выходных.

Измельчитель пищевых отходов STATUS NEXT 200 Compact

  • Компактный корпус устройства с выносным блоком управления для оптимизации пространства под мойкой
  • Тихий, компактный, лёгкий и высокомоментный бесщеточный BLDC двигатель
  • Автоматический реверс
  • Шумоизоляция измельчительной камеры и двигателя
  • Три ступени измельчения
  • Система защиты от перегрузки и заклинивания
  • Гарантия 5 лет
  • NEXT 200 Compact — новый компактный измельчитель пищевых отходов. Примененная комбинация из инновационного бесщеточного BLDC двигателя и выносного блока управления позволили снизить высоту устройства до 22 см без потери производительности измельчения и снизить нагрузку на мойку. При использовании NEXT 200 Compact в стандартных габаритах подмоечного пространства вам доступен дополнительный объем для организации системы хранения или установки мусорного ведра.

    Комплектация

    • Блок управления
    • Пневмовыключатель (выключатель, шланг, 2 сменные цветовые панели)
    • Фильтрующая сетка с резиновой пробкой
    • Монтажный узел
    • Сливная труба с пружинным хомутом

Измельчители
Камерапластик+стекловолокно
Объем камеры, мл1050
Скорость вращения диска, об/мин2200
Тип двигателябесщеточный постоянного тока (BLDC)
Мощность двигателя, л.с.0,75
Потребляемая мощность, Вт/час560
Напряжение, В220
Способ переработкипроточный
Пневмокнопкада
Дискнержавеющая сталь
Сливной фланецнержавеющая сталь
Защита от перегрузокда
Реверсда
Фильтрующая сеткада
Крышка толкательнет
Усилитель мощностинет
Высота, мм224
Диаметр, мм210
Вес, кг5
Гарантия, лет5