→ リクエスト数を制限するか、リトライ処理を組み入れてください。
時間あたりのAPIリクエスト数が、APIの呼び出し回数に関する制限を超えた場合、ステータスコード429(Too Many Requests)
が返却されます。
429エラーの回避方法としては、以下の2つの方法が考えられます。
1. リクエスト数を制限する
リクエスト処理自体を制限し、秒間に送られるリクエスト数を60件以下にする方法です。
例えば「Promise Throttle」のようなサードパーティライブラリを利用して、リクエスト数を制限する方法が考えられます。
フレームワークを利用している場合には、フレームワークの設定値を変更することによって、同時実行数を抑えたり、リクエスト間隔を設けることで、リクエスト数を制限する方法が考えられます。
Next.js
以下の設定を行い、ビルド時の並列実行を制限することで、時間あたりのリクエスト数を制限することができます。
// Next.jsの設定ファイル(next.config.js)
...
experimental: {
workerThreads: false,
cpus: 1
},
...
Nuxt3
concurrency
の値を低く設定し、interval
の値を大きくすることで、時間あたりのリクエスト数を制限することができます。
// Nuxt3の設定ファイル (nuxt.config.js)
export default defineNuxtConfig({
nitro: {
prerender: {
concurrency: 100, // 1スレッドで実行されるルートの数
interval: 1000, //ページ生成の際のディレイ(ミリ秒)
}
}
})
Nuxt2
concurrency
の値を低く設定し、interval
の値を大きくすることで、時間あたりのリクエスト数を制限することができます。
// Nuxt2の設定ファイル (nuxt.config.js)
...
generate: {
concurrency: 100, // 1スレッドで実行されるルートの数
interval: 1000, //ページ生成の際のディレイ(ミリ秒)
},
...
2. リトライ処理を追加する
リクエストの失敗時に備え、リトライ処理を追加する方法です。
サードパーティのリトライライブラリなどを併用することで実装します。
JavaScript用のSDKにでは、オプションの機能として、リトライ処理を有効化することが可能です。詳しくは以下の記事をご参照ください。
▼ microcms-js-sdkにリトライオプションが追加されました
https://blog.microcms.io/js-sdk-retry-option/
APIの呼び出し回数に関する制限は、オリジンへのアクセスが1秒間に60回以上行われた場合に限ります。ですので、CDNのキャッシュが使用されたときはこの制限にはあたりません。