200 — Это Хорошо Или Плохо?

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

Мы поговорим о коде состояния HTTP 200 и ошибках в ответе.

  
  
   

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

Нормально ли возвращать такой код в случае возникновения ошибки? Нет? Да? Что ж, давайте разберемся.



200 — это хорошо или плохо?



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

Допустим, отправлен один запрос.

Запрос завершается успешно.

Возвращаем код 200. Ответ не содержит информации об ошибке.

В этом случае все предельно просто и понятно.

Что делать, если вам нужно выполнить пакетную операцию? Например, мы работаем с имидж-сервером.

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

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

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

Предположим, что по какой-то причине (например, на сервере закончилось место) видео не удалось загрузить.

Что бы вы вернули в этом случае? 2хх или 4хх или 5хх? Сервер отвечает примерно так:

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, специально предназначенные для таких случаев.

В них просто встроены возможные варианты и шаблоны.

Вы можете довольно легко интегрировать их в свой проект и быть готовыми к разного рода «сбоям» запросов.

Но есть одна вещь.

В такие моменты ваш код становится уродливым.

Ты говоришь ему: — Слушай, у нас тут одно внешнее API. Он вообще нормальный.

Вам просто нужно внимательно посмотреть на то, что приходит в ответ. Если ответ содержит поле «ошибка», значит запрос не выполнен.

- Но для этого и нужны 4хх и 5хх! Кто вообще это делает?! - ТСС.

Не будь таким громким.

Он может слышать.

Пожалуйста, будьте добры к нему.

И просто посмотрите не только код статуса, но и ответ, пожалуйста.

- ХОРОШО…

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

Ну 200 и 200. Ну не сократили.

Или мы не успели.

Или не будут вообще.

Ну и что?! Написал парсер json и всё! Ну да, но я хочу знать, почему.

Забыл? Ты забил? Не было времени? Не знал? Возможно, я что-то упускаю.

Или я не знаю.

Мне нужно ваше мнение.

Срочно.

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

Теги: #api #Анализ и проектирование систем #проектирование и рефакторинг #http #обработка ошибок #работа на выходных #мои любимые логи

Вместе с данным постом часто просматривают: