Приветствую.
Есть вопрос по дизайну работы с ошибками в клиенте некоего API. Как лучше, красивее, проще в работе, более true, более модно-стильно-молодёжно, как вам, разработчикам больше понравилось бы?
$result = $apiFacade->getData();
if ($result->isSuccess()) {
echo 'success: ' . $result->getData() . PHP_EOL;
} else {
if (ApiClient::ERROR_NOT_ENOUGHT_UNITS === $result->getError()->getCode()) {
// some actions for this error
} elseif (ApiClient::ERROR_OBJECT_NOT_EXISTS === $result->getError()->getCode()) {
// some actions for this error
} else {
// some actions for other errors
}
}
try {
$result = $apiFacade->getData();
} catch (ApiNotEnoughtUnitsException $exception) {
// $exception->getCode() вернёт код ошибки
// $exception->getMessage() вернёт текст ошибки
// some actions for this error
} catch (ApiObjectNotExistsException $exception) {
// some actions for this error
} catch (ApiException $exception) {
// some actions for other errors
}
echo 'success: ' . $result . PHP_EOL;
Речь здесь идёт об ошибках, получаемых в ответе API.
На мой взгляд, бросаться исключениями — хорошо. Если где-то в приложении я не обработаю исключение, его поймает глобальный exception_handler и я об этом узнаю из логов или оповещений. С другой стороны, существует вероятность возникновения ситуации, когда ошибка API будет ожидаемым результатом и мне нужно будет получить, какие-то подробности об этой ошибке. В таком случае, в клиенте мне нужно будет создать экземпляр исключения, записать в его поля эти самые подробности и только потом выбросить его. Не слишком мутно?
Кто сталкивался, ещё какие есть плюсы и минусы у этих подходов?