在Laravel 5.2应用程序中,我试图找出处理异常的最优雅方法,当外部服务的API调用抛出异常时。这些不应该阻止程序继续进行,因为即使没有有问题的API调用,也可以在之后运行应用程序的其他部分。
E.g。目前我有
try {
$statistics->results = $api->call($parameter);
$statistics->status = Statistic::SUCCESS;
} catch (ExternalApiCallException $e) {
$statistics->results = null;
$statistics->status = Statistic::API_CALL_ERROR;
}
我正在考虑使用Laravel的app/Exceptions/Handler.php
并使用
if ($e instanceof ExternalApiCallException $e) {
Log::warning("API Call didn't work");
}
但后来我无法在那里设置统计信息的状态,因为Handler.php
无法访问它。有没有更好的方法或尝试捕获阻止的方式去这里?
答案 0 :(得分:1)
try-catch-finally绝对是一个很好的方法。在你的情况下,API异常是本地化的,不应该全局出现(我推测),所以我会选择将逻辑保存在一个地方,而不是将异常处理作为Handler.php文件中的条件。在我看来,Handler.php应该被用作最后的选择,用于设置和报告其他未捕获和意外的异常。对于异常不重要甚至没有预期的所有其他情况,本地try {}块更容易维护,因为代码的重要部分不会被开发人员隐藏在另一个文件中。
不要忘记你也可以使用finally {}块,无论是否触发了异常,都会在try {}和catch {}块之后执行。
try
{
// run this first
}
catch (ExternalApiCallException $e)
{
// in case something went wrong
}
finally
{
// this runs after everything else
}