101件以上のコンテンツを取得するにはどうしたらよいですか?

回答

101件以上のコンテンツを取得するには、大きく以下の2つの方法がございます。

  1. (JavaScriptをご利用の場合)SDKの全件取得のためのメソッドであるgetAllContents() / getAllContentIds() を使う方法
  2. その他の方法

以下、「具体的な方法」のセクションにてそれぞれ解説いたします。

背景

2023年10月2日(月)以降に作成されたサービスについては、limitパラメータの上限が100件にセットされているため、101件以上のデータを取得する際には、リクエストを分割して取得する必要があります。

またそれ以前に作成されたサービスについても、レスポンスサイズの制約の関係で、分割してデータを取得することを推奨しております。

具体的な方法

1. (JavaScriptをご利用の場合)SDKの全件取得のためのメソッドであるgetAllContents() / getAllContentIds() を使う方法

JavaScript向けのSDK(microcms-js-sdk)においては、以下の全件取得のためのメソッドがご利用いただけます。

  • getAllContents():コンテンツの全件取得を行う(v2.7.0より利用可能)
  • getAllContentIds():コンテンツIDの全件取得を行う(v2.6.0より利用可能)

上記を利用することで、101件以上のコンテンツの取得が可能です。

▼getAllContents()のご利用イメージ

client
.getAllContents({
endpoint: 'endpoint',
})
.then((res) => console.log(res)) // コンテンツの配列が得られる
.catch((err) => console.error(err));

▼getAllContentIds()のご利用イメージ

client
.getAllContentIds({
endpoint: 'endpoint',
})
.then((res) => console.log(res)) // コンテンツIDの配列が得られる
.catch((err) => console.error(err));

詳しくは、SDKのREADMEをご参照ください。

2. その他の方法

コンテンツAPI/マネジメントAPIのレスポンスには、対象コンテンツの総数を示すtotalCountという値が含まれます。

こちらの値を参考にし、取得できていないコンテンツ数を計算し、offsetパラメータで取得開始位置をずらして繰り返しリクエストすることで、101件以上のデータを取得することができます。

以下はfetch APIを用いて、blogエンドポイントのコンテンツIDとタイトルを100件ずつ、再帰的に全件取得する例になります。

const getAllContentsIDWithTitle = async (limit = 100, offset = 0) => {
  const data = await fetch(
    `https://xx.microcms.io/api/v1/blog?fields=id,title&limit=${limit}&offset=${offset}`,
    {
      headers: {
        'X-MICROCMS-API-KEY': 'xx',
      },
    },
  ).then((res) => res.json())

  if (data.offset + data.limit < data.totalCount) {
  const contents = await getAllContentsIDWithTitle(
      data.limit,
      data.offset + data.limit,
    )
    return [...data.contents, ...contents]
  }

  return data.contents
}

// 全件取得処理
getAllContentsIDWithTitle().then((res) => console.log(res))