概要
API通信では、HTTPのレスポンスがエラーとなり失敗してしまうことがあります。
API通信を再度実行することで、復帰ができる可能性がある場合、curl実行のリトライが有効でしょう。
本記事では、実際にリトライ処理を実装した際に参考にした文献と、追加で検討した内容について述べます。
結論
- 下記判定により、リトライをするかどうかを判断する。
- PHPの標準ライブラリにある
curl_errno
を用いてエラー種別を確認。 - (採用)PHPの標準ライブラリにある
curl_error
を用いてエラー文言を確認。
- PHPの標準ライブラリにある
エラー文言をリトライ処理の判定に組み込んだ理由
TCP connection reset by peer
のエラーメッセージが返される場合にリトライを行う実装にしたかったので、そのエラーメッセージが返ってくる時のエラー番号で判定しようと考えていました。
しかしながら、エラーメッセージとエラー番号の関係は必ず一意になるとは限らないようでした。
また、今回は特定のエラーメッセージが返された時にリトライしたいというニーズだったので、それならエラーメッセージだけで判定すれば良さそう、ということでエラー文言をリトライ処理の判定に組み込む判断をしました。
さいごに
API通信をリトライする実装をするとなった時、とりあえず全部リトライしてしまえば〜のお気持ちでした。
状況によってはそれでも良いと思います。
ただし、リアルタイム性が問われるアプリケーションの場合、何度もsleepをかけて遅延が大きくなってしまうと大変かもなので、いい塩梅を考えないといけないな、と思いました。
参考文献
https://stackoverflow.com/questions/6080369/curl-retry-in-php
https://www.php.net/manual/ja/function.curl-errno.php
https://www.php.net/manual/ja/function.curl-error.php