メインコンテンツへスキップ
SDK には、ページネーション対応のレスポンスを返すあらゆるエンドポイントで使用できる汎用のページネーターユーティリティが用意されています。メソッドは通常のレスポンスを返し、その上にページネーターをかぶせて利用します。

基本的なページネーション

quick-start.ts
import { Client, UserPaginator, PaginatedResponse, Schemas } from '@xdevplatform/xdk';

const client: Client = new Client({ bearerToken: 'your-bearer-token' });

// 任意のリスト系エンドポイントを適切な型情報でラップする
const followers: UserPaginator = new UserPaginator(
  async (token?: string): Promise<PaginatedResponse<Schemas.User>> => {
    const res = await client.users.getFollowers('<userId>', {
      maxResults: 100,
      paginationToken: token,
      userFields: ['id','name','username'],
    });
    return { 
      data: res.data ?? [], 
      meta: res.meta, 
      includes: res.includes, 
      errors: res.errors 
    };
  }
);

手動ページング

import { UserPaginator, Schemas } from '@xdevplatform/xdk';

await followers.fetchNext();          // 最初のページ
while (!followers.done) {
  await followers.fetchNext();        // 後続のページ
}

const userCount: number = followers.users.length;  // 取得したユーザーの総数
const firstUser: Schemas.User | undefined = followers.users[0];
const nextToken: string | undefined = followers.meta?.nextToken;

非同期イテレーション

import { Schemas } from '@xdevplatform/xdk';

for await (const user of followers) {
  const typedUser: Schemas.User = user;
  console.log(typedUser.username);  // 完全に型付けされたアクセス
}

次のページを新しいインスタンスとして扱う

import { UserPaginator } from '@xdevplatform/xdk';

await followers.fetchNext();
if (!followers.done) {
  const page2: UserPaginator = await followers.next(); // 次のページから開始する独立した Paginator インスタンス
  await page2.fetchNext();
  console.log(page2.users.length);  // 2 ページ目のアイテム
}

エラー処理とレート制限

import { UserPaginator, Schemas } from '@xdevplatform/xdk';

try {
  for await (const item of followers) {
    const user: Schemas.User = item;
    // user を処理する...
  }
} catch (err: unknown) {
  if (followers.rateLimited) {
    console.error('レート制限中です。バックオフが必要です');
    // バックオフして後でリトライする
  } else {
    console.error('ページネーションエラー:', err);
    throw err;
  }
}
JavaScript/TypeScript 用 XDK を使った詳細なコードサンプルについては、code samples GitHub リポジトリを参照してください。