Задать вопрос
@j_KS

Является ли 200 OK с телом ошибки антипаттерном REST?

Встречается API, который всегда возвращает 200 OK, а бизнес-ошибку передает в JSON:

{ "status": "error", "message": "..." }

Насколько это допустимая практика? Какие могут быть проблемы?
  • Вопрос задан
  • 179 просмотров
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Stepik
    Практика по REST и SOAP API на тренажере «Битва покемонов»
    4 недели
    Далее
  • Нетология
    Go-разработчик с нуля + нейросети
    9 месяцев
    Далее
  • Skillbox
    Профессия PHP-разработчик с нуля до PRO
    7 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 5
@66demon666
Сетевой админ, АТС-админ
Да, если вы работаете с HTTP то необходимо использовать и коды ответов самого протокола. Можете, конечно, этого не делать, если, например, делаете для себя проект. Да и причин этого НЕ делать нет
Ответ написан
Проблема в том что теперь потребителю этого API нужно будет читать вашу документацию, чтобы корректно обрабатывать ошибки (всегда быть готовым к ошибке с 200 кодом и парсить ответ), а вам это нужно достаточно подробно и однозначно описать.

Проблемы точно возникнут, когда вы решите настроить метрики, балансер/обратный прокси для такого сервиса, так как они обычно смотрят на коды ответа и не смотрят в тело.

По хорошему следует возвращать 2xx только если все реально успешно, 4xx - если есть какая-то ошибка, которая возникла по вине клиента, и 5xx - если ошибка по вине сервера.

Если нужно что-то дополнительно бизнесовое сообщить - можно и нужно передать это в теле ответа.

По формату ответа с ошибкой рекомендую посмотреть на RFC 9457 Problem Details for HTTP APIs
Ответ написан
@rPman
есть разные классы ошибок, а точнее они классифицируются по тому, какое поведение должно быть у пользователя (клиента).

В общем можно разделить ошибки на следующие типы:
* можно продолжать но пользователь должен быть уведомлен - warning
* требуют повтор последнего действия - простые
* требуют откат и повтор группы действий - сложные, нужна своя логика отработки
* требуют остановку и вмешательство пользователя - фатальные

Так вот ошибки второго типа могут быть без проблем не 200-го кода возврата, тогда библиотека на уровне отправки запроса может его повторить.

Все остальные требуют обработку более высокого уровня, и без проблем такие сообщения могут и должны быть 200 код возврата

p.s. отсюда, к примеру проблема прав доступа, это фатальная проблема, если делать код возврата не 200, то библиотека должна правильно это интерпретировать и не делать бессмысленные повторы.
Ответ написан
Комментировать
@basili4-1982
>Является ли 200 OK с телом ошибки антипаттерном REST?
ДА.

Все кто будут пользоваться таким Апи проклянут разработчика. Других последствий не будет.
К сожалению у нас нет REST полиции.
Ответ написан
Комментировать
@v__V__v
Разработчик
Выше уже дали правильный и исчерпывающий в общем-то ответ, но, как разработчик в т.ч. API, подчеркну, что ошибки бывают разные. Когда используется код 200, но в ответе идет { "status": "error", "message": "..." }, то речь идет об ошибке уровня пользователя системы. Это пользователь захотел странного и был вежливо послан, с указанием в чем он неправ, а все остальное отработало как положено. Именно для разделения источников и уровней ошибок и используется такой подход. И, да, всегда надо читать документацию, это очень и очень полезно)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы