2016-05-20 1 views
1

Laravel 5.2アプリでは、外部サービスのAPI呼び出しによって例外がスローされたときに、例外を処理する最も洗練された方法を見つけようとしています。これらは、問題のあるAPI呼び出しがなくても実行できる、後で実行できるアプリの他の部分があるため、プログラムの継続を止めるべきではありません。APIコールで{} catch {}を試してみるか、別の方法で処理しますか?

など。現在、私は

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がアクセス権を持っていないので、私は、そこに統計のステータスを設定することはできませんそれに。より良い方法があるのか​​、試行錯誤してここへ行くのを妨げているのでしょうか?

答えて

1

try-catch-finallyは間違いなく良いアプローチです。あなたのケースでは、APIの例外はローカライズされており、グローバルには表示されません(私は推測します)。したがって、ロジックを1つの場所に保持し、例外処理をHandler.phpファイルの条件として入れないようにします。私の意見では、Handler.phpは、最後の手段として、キャッチされていない予期しない例外をスタイルして報告するために使用するべきです。他のすべてのケースでは、コードの重要な部分が別のファイルの開発者から隠されていないため、例外が重大ではない、または予期されない場合でも、local try {}ブロックは維持しやすくなります。

finally {}ブロックを使用することもできますが、例外がトリガされたかどうかにかかわらず、try {}ブロックとcatch {}ブロックの後に実行されます。

try 
{ 
    // run this first 
} 
catch (ExternalApiCallException $e) 
{ 
    // in case something went wrong 
} 
finally 
{ 
    // this runs after everything else 
} 
関連する問題