1. ヘルプ
  2. 機能
  3. コンテンツAPI(GET)

APIへのリクエストで429エラーが返却される場合の対処法は?

→ リクエスト数を制限するか、リトライ処理を組み入れてください。

時間あたりのAPIリクエスト数が、APIの呼び出し回数に関する制限を超えた場合、ステータスコード429(Too Many Requests)が返却されます。

429エラーの回避方法としては、2つの方法が考えられます。

APIの呼び出し回数に関する制限は、オリジンへのアクセスが1秒間に60回以上行われた場合に限ります。ですので、CDNのキャッシュが使用されたときはこの制限にはあたりません。

1. リクエスト数を制限する

リクエスト処理自体を制限し、秒間に送られるリクエスト数を60件以下にする方法です。

フレームワークを利用している場合には、フレームワークの設定値を変更することによって、同時実行数を抑えたり、リクエスト間隔を設けることで、リクエスト数を制限する方法が考えられます。

JavaScript

Promise Throttle」のようなサードパーティライブラリを利用して、リクエスト数を制限する方法が考えられます。

Next.js

以下の設定を行い、ビルド時の並列実行を制限することで、時間あたりのリクエスト数を制限することができます。

// Next.jsの設定ファイル(next.config.js)
...
experimental: {
  workerThreads: false,
  cpus: 1
},
...

なお、Next.js 15で試験的に導入された「Advanced Static Generation Control」では、以下のように設定できます。

  • staticGenerationMaxConcurrencyの値を下げ、各ワーカーが同時に処理するページ数を少なくする
  • staticGenerationMinPagesPerWorkerの値を上げ、複数ワーカーの起動による並列実行を少なくする
// Next.jsの設定ファイル(next.config.js)
...
experimental: {
staticGenerationMaxConcurrency: 1,
staticGenerationMinPagesPerWorker: 50,
},
...

Advanced Static Generation Controlは実験的な機能です。破壊的な仕様変更や、予期せぬエラーを招く可能性があるため、本番環境への導入は推奨されていません。

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

JavaScript用のSDKにでは、オプションの機能として、リトライ処理を有効化することが可能です。詳しくは以下の記事をご参照ください。

▼ microcms-js-sdkにリトライオプションが追加されました
https://blog.microcms.io/js-sdk-retry-option/

Next.js

Next.js 15を利用している場合は、実験的な機能である「Advanced Static Generation Control」のstaticGenerationRetryCountの値を大きくして、リトライ回数を指定できます。

// Next.jsの設定ファイル(next.config.js)
...
experimental: {
 staticGenerationRetryCount: 2,
},
...

Advanced Static Generation Controlは実験的な機能です。破壊的な仕様変更や、予期せぬエラーを招く可能性があるため、本番環境への導入は推奨されていません。