В этой трехминутной статье я хочу затронуть актуальную тему.
Мы поговорим о коде состояния 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 и пакетная операция
Допустим, отправлен один запрос.Запрос завершается успешно.
Возвращаем код 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 #обработка ошибок #работа на выходных #мои любимые логи
-
Введение В Соединения
19 Oct, 24 -
Не Только Локальный Хост?
19 Oct, 24