php - 尝试在 API 调用上使用 {} catch {} 或进行不同的处理?

标签 php laravel error-handling laravel-5

在 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/

相关文章:

javascript - 保持复选框被选中,刷新并提交后

php - 如果键相同,如何将值附加到数组中

php - 为数据库中的两个新表创建模型和关系

php - 尽管在 RouteServiceProvider 中取消了注释,但 Controller 仍无法在 Laravel 8 上运行

c# - 错误和异常处理

php - 使用 PHP 将图像旋转 45 度时如何避免出现黑色背景?

javascript - jQuery Ajax : VM845:1 Uncaught SyntaxError: Unexpected token <

laravel - 如何记录对象?

java - 检查两个整数输入是否在范围内-Java

php - 错误500页面-如何获取最后一个异常?