在 Laravel 5.2 应用程序中,当外部服务的 API 调用引发异常时,我试图找出处理异常的最优雅的方法。这些不应阻止程序继续运行,因为应用程序的其他部分仍然可以在之后运行,即使没有有问题的 API 调用也可以完成。
例如目前我有
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
无法访问它。有没有更好的方法或者 try-catch-blocks 是这里的方法?
最佳答案
try-catch-finally 在这里绝对是一个好方法。在您的情况下,API 异常是本地化的,不应全局出现(我认为),因此我会选择将逻辑保留在一处,而不是将异常处理作为 Handler.php 文件中的条件。在我看来,Handler.php 应该用作最后的选择,以设置样式并报告未捕获和意外的异常。对于异常不重要甚至不属于预期的所有其他情况,本地 try {} block 更容易维护,因为代码的重要部分不会在另一个文件中对开发人员隐藏。
不要忘记,您还可以使用finally {} block ,无论是否触发异常,它都会在try{}和catch{} block 之后执行。
try
{
// run this first
}
catch (ExternalApiCallException $e)
{
// in case something went wrong
}
finally
{
// this runs after everything else
}
关于php - 尝试在 API 调用上使用 {} catch {} 或进行不同的处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37346178/