回答
101件以上のコンテンツを取得するには、大きく以下の2つの方法がございます。
- (JavaScriptをご利用の場合)SDKの全件取得のためのメソッドであるgetAllContents() / getAllContentIds() を使う方法
- その他の方法
以下、「具体的な方法」のセクションにてそれぞれ解説いたします。
背景
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))