こんにちは、microCMSでカスタマーエンジニアとして働いているシンハラです。
このたびmicroCMSのJavaScriptのSDKであるmicrocms-js-sdk
に、リトライオプションを追加されましたので、お知らせします(ver 2.4.0)。
概要
クライアント生成時にretry: true
オプションを付与することで、APIがエラーが返却された際に、自動的にリトライを行うことができます。
const client = createClient({
serviceDomain: "YOUR_DOMAIN",
apiKey: "YOUR_API_KEY",
retry: true
});
現在の仕様ですと、最大2回までリトライを行います。
リトライにあたっては、 Exponential Backoff
というアルゴリズムを採用しているため、リトライが分散して行われるようになっています。
- 1回目のリトライ: 1回目のリクエスト失敗から、5秒〜10秒のディレイ
- 2回目のリトライ: 2回目のリクエスト失敗から、10秒〜20秒のディレイ
また404 Not Found
のような、リトライをしても解決されない可能性が高いステータスコードについては、リトライは行われません。
詳細については、こちらのプルリクエストをご参照ください。
課題と解決策
microCMSのAPIはサーバレスアーキテクチャを採用し、大量のリクエストにも対応できる構成となっていますが、短時間に極度にリクエストが集中した際に、まれに500番台のエラーレスポンスが返却されることがあります。
その他にもmicroCMSの仕様として、GET APIの呼び出し回数が1秒あたり60回を超えた場合、429 Too Many Requests
のステータスコードが返却されるようになっています(制限事項)。SSGのようなアーキテクチャを採用し並行してビルドを行う際に、意図せずこちらの制約に抵触してしまう場合がありました。
エラーが発生した場合のデメリットとしては、CSR/SSRの場合、該当のリクエストを行ったユーザーはページのレンダリングに失敗します。またSSGの場合だと、ビルドプロセス全体が終了してしまうケースがほとんどですので、エラーが発生した際は再ビルドを行う必要がありました。
これらの課題について、リトライオプションを有効化することによって、正常なレスポンスを取得できる可能性が高まります。特にSSGの場合だと、再ビルドを回避できる可能性が高まるため、より効率的なデプロイを実施が可能となります。
おわりに
今回の仕様追加に関して、フィードバックがございましたら、画面右下のチャット欄よりお気軽にご連絡ください!