Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.
Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

GraphQLページネーション

このガイドでは、GraphQL APIにページネーションを実装する方法を学びます。

大量のレコードセットを扱う場合、最初のN個の項目のみを取得したいことがあります。例えば、Todoアプリの基本的なGraphQLスキーマから始めましょう:

type Todo @model {
id: ID!
title: String!
description: String
}

@modelディレクティブでAPIが作成されると、以下のクエリが自動的に生成されます:

type Query {
getTodo(id: ID!): Todo
listTodos(
filter: ModelTodoFilterInput
limit: Int
nextToken: String
): ModelTodoConnection
}

次に、ModelTodoConnection型を見て、listTodosクエリを実行したときに返されるデータのアイデアを得ます:

type ModelTodoConnection {
items: [Todo]
nextToken: String
}

listTodosクエリを使用してAPIをクエリする場合、戻り値の型はModelTodoConnectionになります。つまり、Todosの配列とnextTokenの両方を返すことができます。

nextTokenはページネーションを処理するために使用されます。nextTokennullの場合、APIから返すデータがこれ以上ないことを意味します。nextTokenが存在する場合、その値を次のlistTodosクエリの引数として使用して、APIから次の選択セットを返すことができます。

これを試すために、以下のようなミューテーションを使用して5つのtodosを作成してみてください:

mutation createTodo {
createTodo(input: {
title: "Todo 1"
description: "My first todo"
}) {
id
title
description
}
}

次に、クエリにlimit引数を渡すことで、クエリ内のtodosの数の制限を設定できます。このクエリでは、制限を2項目に設定し、戻り値としてnextTokenをリクエストします:

query listTodos {
listTodos(limit: 2) {
items {
id
title
description
}
nextToken
}
}

次に、APIから次の2つの項目をクエリするために、このnextTokenを引数として渡すことができます:

query listTodos {
listTodos(limit: 2, nextToken: <your_token>) {
items {
id
title
description
}
nextToken
}
}

返すその他の項目がない場合、レスポンス内のnextTokenはnullに設定されます。