→ SDKを利用するか、独自で実装を行ってください。
101件以上のコンテンツを取得するには、以下の2つの方法がございます。
- SDKの全件取得のメソッドを利用する
- 独自で実装する
1. SDKの全件取得のメソッドを利用する
JavaScript向けのSDK(microcms-js-sdk)では、全件取得のためのメソッドがご利用いただけます。コンテンツの全量が必要な場合と、コンテンツIDが必要な場合のために、2種類のメソッドが用意されています。
getAllContents()
:コンテンツの全件取得を行う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. 独自で実装する
以下のようなケースでは、独自で実装を行う必要があります。
- JavaScript以外の言語を利用している場合
- JavaScriptのSDKを利用していない場合
- 全件取得ではなく、任意の件数を取得する場合
コンテンツ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件以上のデータを取得する際には、リクエストを分割して取得する必要があります。
なお、それ以前に作成されたサービスについても、レスポンスサイズに上限があることから、分割してデータを取得することを推奨しております。