信頼できない API ソースから結果を取得するために、Laravel 5.2 でいくつかのコードを作成しました。ただし、API 呼び出しは約 3 分の 1 の確率で 503 になるため、試行が失敗した場合にリクエストを自動的に再試行できる必要があります。
私はこれを行うために Guzzle を使用しており、503 応答を処理する前にインターセプトするコードを配置する場所を知っていると思います。しかし、実際にそこに何を書くべきかわかりません。
guzzle のドキュメントは再試行に関する限り多くを提供しておらず、私が遭遇した Guzzle 6 のすべての例は、結果を取得する方法のみを示しています (これは既に実行できます)。必要に応じてリクエストします。
私は決して誰かに私のために仕事をするように頼んでいるわけではありません - しかし、私はこれについての私の理解の限界に近づいていると思います. 誰かが私を正しい方向に向けることができれば、それは大歓迎です:)
編集:
がんばって見直します。次のコードを検討してください。その中で、通常は JSON 応答を生成する GET 要求を送信したいと考えています。
DataController.php
$client = new \GuzzleHttp\Client();
$request = $client->request('GET', 'https://httpbin.org/status/503'); // URI is for testing purposes
このリクエストからの応答が 503 の場合、ここでインターセプトできます。
Handler.php
public function render($request, Exception $e)
{
if ($e->getCode() == 503)
{
// Code that would tell Guzzle to retry the request 5 times with a 10s delay before failing completely
}
return parent::render($request, $e);
}
それを置くのに最適な場所かどうかはわかりませんが、本当の問題は、if ($e->getCode() == 503)