first-programmer
@first-programmer
Backend software engineer

Как правильно исопльзовать exception в api и нужно ли вообще?

Всем привет коллеги.

На практике часто встречаю абсолютно разные подходы к обработке ошибок, в частности в api сервисов.
Где-то генерируют исключения, где-то возвращают в джейсоне массив типа такого

if (!Yii::$app->request->isPost) {
    return ['result' => 'error', 'message' => 'POST only', 'code' => 405];
}

if (!$guid = Yii::$app->request->post('guid')) {
    return ['result' => 'error', 'message' => 'Guid required', 'code' => 400];
}

if (!$reason = Yii::$app->request->post('reason')) {
    return ['result' => 'error', 'message' => 'Reason required', 'code' => 400];
}


Как вообще правильно делать? В api кидать exception а в клиенте его ловить try-catch и обрабатывать? Все ли эксцепшены нужно вообще кидать и обрабатывать? Например в данном примере, где отсутствие какого-то параметра в post является критичным, как правильно поступать? Если не трудно, опишите, что на ваш взгляд в этом случае лучше и правильнее, как бы вы сделали на стороне API и на стороне клиента (другой микросервис на php).

Спасибо.
  • Вопрос задан
  • 127 просмотров
Решения вопроса 2
DevMan
@DevMan
и как вы на клиенте собрались ловить эксепшены на сервере?

если что-то пошло не так на сервере, он должен об этом сообщить клиенту. а как этот ответ обрабатывать, задача клиента.
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Не совсем понятен вопрос: Вы свое пишете или с чужим разобраться не можете?
В любом случае - выброшенное исключение по хорошему не должно вывалиться клиенту as is, то есть если вы его обработали - отдайте в формате в котором вы с клиентом обмениваетесь всем остальным - жсон, эксемель, йамл, прочие извращения... Странно разделять эксепшн/не эксепшн в рамках взаимодействия клиента и сервера. Клиент должен получить ответ, в формате принятом апи для обмена. В результате чего получился этот ответ на сервере вообще не должно волновать никого кроме программиста. Можете вообще эксепшены не использовать и пилить какие-то кастомные костыли вместо них. Это просто удобный инструмент обработки нетипичных ситуаций, обычно связанных с системным уровнем или со взаимодействием с сервисами системы (бд,кэш етц.)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
можешь не изобретать велосипед и использовать swagger
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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