Что есть исключения?

Пытаюсь разобраться с исключениями в API. Имею ввиду использование клиента для работы с API.
Я думаю должно быть базовое исключение для оповещения о проблемах в выполнении запроса, проблем с сетью или отсутствия данных для авторизации. И исключение для ошибок в запросах.

Но нет уверенности во необходимости исключения для ошибок в запросах. Мартин Фаулер говорил что использовать исключения в валидации не нужно, потому что ошибки являются ожидаемым поведением. А в случае с API запросом ошибки тоже являются ожидаемыми. Но исключительность ситуации создает то что без результата запроса продолжать работать нет смысла.

Являются ли ошибки в запросах API исключительными ситуациями?
  • Вопрос задан
  • 918 просмотров
Пригласить эксперта
Ответы на вопрос 3
@xfg
Исключение - это отклонение от нормы. Оно всегда будет. Всего не предусмотреть. Вы можете сделать исключения для Unprocessable, Forbidden, NotFound.
Написать обработчик, который ловит все необработанные исключения и конвертирует Unprocessable в HTTP 422, Forbidden в HTTP 403, Not Found в HTTP 404, а все остальное в HTTP 500.

О проблемах с сетью клиента уведомлять не надо. Таких технических проблем могут быть сотни и тысячи. Когда они возникнут, ваше приложение итак по очевидным причинам не сможет обработать запрос и упадет с исключением/ошибкой. Вам лишь надо, чтобы исключение/ошибка провалилась в обработчик и превратилась в 500 Internal Server Error. О большем клиенту знать не зачем.
Ответ написан
Комментировать
Если при запросе API (что бы это не значило) возможно, что прога "упадёт" (не выдаст ответ с ошибкой, а именно выбросит отлавливаемое исключение), то вы сможете это исключение перехватить.
В случае с PHP, в частности, Fatal error на нижнем уровне не даст перехватываемое исключение, всё гавкнется по-любому.
Ответ написан
@BorisKorobkov
Web developer
Правильнее, когда любой метод-обертка никогда не бросает исключения, а всегда возвращает либо запрошенные данные из API, либо false в случае ошибки. Ну и в качестве бонуса отдельный метод типа getErrors() с кодом и текстом ошибки.
А вот внутри API-класса на разных уровнях можно кидать исключения типа "неправильный конфиг", "проблемы с сетью" и пр. Это нужно для быстрого выхода из любого уровня наверх, чтобы в десятки разных мест не писать повторяющиеся проверки. Но эти исключения обязательно ловить на верхнем уровне обертки и возвращать false.
Ответ написан
Ваш ответ на вопрос

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

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