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

→ SDKを利用するか、独自で実装を行ってください。

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

  1. SDKの全件取得のメソッドを利用する
  2. 独自で実装する

1. SDKの全件取得のメソッドを利用する

JavaScript向けのSDK(microcms-js-sdk)では、全件取得のためのメソッドがご利用いただけます。コンテンツの全量が必要な場合と、コンテンツIDが必要な場合のために、2種類のメソッドが用意されています。

  1. getAllContents():コンテンツの全件取得を行う
  2. getAllContentIds():コンテンツIDの全件取得を行う

上記を利用することで、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. 独自で実装する

以下のようなケースでは、独自で実装を行う必要があります。

  1. JavaScript以外の言語を利用している場合
  2. JavaScriptのSDKを利用していない場合
  3. 全件取得ではなく、任意の件数を取得する場合

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

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

例1: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))

例2:blogエンドポイントのコンテンツIDを300件まで取得

const getContentsWithLimit = async (maxCount) => {
  const limit = 100
  let offset = 0
  let allContents = []

  while (allContents.length < maxCount) {
  const currentLimit = Math.min(limit, maxCount - allContents.length)

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

    allContents = [...allContents, ...data.contents]

    if (offset + currentLimit >= data.totalCount) {
      break
    }

    offset += currentLimit
  }

  return allContents
}

// 指定された件数に到達するまで取得する
getContentsWithLimit(300).then((res) => console.log(res))

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

なお、それ以前に作成されたサービスについても、レスポンスサイズに上限があることから、分割してデータを取得することを推奨しております。