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

APIで500番台のエラーが返却されます。考えられる原因と対策はありますか?

microCMSのAPIはサーバレスアーキテクチャを採用し、大量のリクエストにも対応できる構成となっていますが、高負荷なリクエストが短時間に集中した際に、まれに500番台のエラーレスポンスが返却されることがあります。

▼ コンテンツAPIのエラーレスポンス
https://document.microcms.io/content-api/api-error-response#h26e1de2a55

発生頻度に応じて、下記の対応を行なっていただきますよう、お願いいたします。

発生頻度が低い場合

APIリクエストのリトライ処理を組み入れることで、再度取得を行なっていただきますよう、お願いします。

JavaScript向けのSDKについては、オプションでリトライを有効化することが可能です。

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

発生頻度が高い場合

該当のリクエスト自体が、高負荷を引き起こしている可能性がございます。以下の項目について、該当している項目がないかをご確認ください。

同時リクエスト数が多い

複数のAPIのリクエストが重なることで、高負荷を引き起こしている可能性があります。SSGのようなアーキテクチャを採用している場合は、並列で行うAPIのリクエスト数を調整することで、事象が改善する可能性があります。

また、なるべくキャッシュが利用されるようなリクエストを行うことでも、事象が改善する可能性があります。

▼ コンテンツAPI(GET)のキャッシュはどのように利用されますか?
https://help.microcms.io/ja/knowledge/how-to-use-content-api-caching

depthに指定されている数字が大きい

depthパラメータの値を大きくした場合、コンテンツ参照先のデータを取得して、レスポンスに含める挙動となります。コンテンツ参照を利用しているフィールドが多い場合、depthの値を1つ増やすだけでも、取得するコンテンツ量が非常に大きくなるケースがあります。

depthパラメータには必要となるコンテンツまでの深さを設定することで、事象が改善する可能性があります。

1回のコンテンツ取得件数が多い

1回のリクエストで取得するコンテンツ数が多い場合、レスポンスが遅くなることがあります

limitパラメータを利用して、必要なコンテンツ数のみを取得することで、改善する可能性があります。

全件取得が必要な場合は、offsetパラメータを合わせてご利用ください。

クエリに複雑な条件を組み合わせて指定している

コンテンツの絞り込み条件を[and]や[or]で複数組みわせている場合、検索の仕組み上、負荷が上昇します。

その場合、一部の絞り込みについては、取得先のフロントエンド側にて表示の際にフィルターを行うことで、事象が改善する可能性があります。

コンテンツ数、メディア数、フィールド数が多い

データを探索してレスポンスを生成する仕組みのため、CMSに登録されているデータ量の単純増加により、負荷が上昇します。

不要なデータがある場合は、削除操作を行なっていただくことで、事象が速度が改善する可能性があります。

本件については、エラー発生率の低下に向けて、継続して取り組んでまいります。