Ă propos de la pagination
L'API GraphQL de GitHub limite le nombre d'Ă©lĂ©ments que vous pouvez rĂ©cupĂ©rer en une seule requĂȘte afin de protĂ©ger les serveurs de GitHub contre les requĂȘtes excessives ou abusives. Lorsque vous utilisez lâAPI GraphQL, vous devez fournir un argument first
ou last
sur nâimporte quelle connexion. La valeur de ces arguments doit ĂȘtre comprise entre 1 et 100. LâAPI GraphQL retourne le nombre de connexions spĂ©cifiĂ©es par lâargument first
ou last
.
Si les donnĂ©es auxquelles vous accĂ©dez ont plus de connexions que le nombre dâĂ©lĂ©ments spĂ©cifiĂ©s par lâargument first
ou last
., la rĂ©ponse est divisĂ©e en « pages » plus petites de la taille spĂ©cifiĂ©e. Ces pages peuvent ĂȘtre extraites une Ă la fois jusquâĂ ce que lâensemble du jeu de donnĂ©es ait Ă©tĂ© rĂ©cupĂ©rĂ©. Chaque page contient le nombre dâĂ©lĂ©ments spĂ©cifiĂ©s par lâargument first
ou last
., sauf sâil sâagit de la derniĂšre page, qui peut contenir un nombre infĂ©rieur dâĂ©lĂ©ments.
Ce guide montre comment demander des pages de résultats supplémentaires pour les réponses paginées, comment changer le nombre de résultats retournés sur chaque page et comment écrire un script pour récupérer plusieurs pages de résultats.
Demande dâune cursor
dans votre requĂȘte
Lorsque vous utilisez lâAPI GraphQL, vous utilisez des curseurs pour parcourir un jeu de donnĂ©es paginĂ©. Le curseur reprĂ©sente une position spĂ©cifique dans le jeu de donnĂ©es. Vous pouvez obtenir le premier et le dernier curseur dâune page en interrogeant lâobjet pageInfo
. Par exemple :
query($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) {
pullRequests(first: 100, after: null) {
nodes {
createdAt
number
title
}
pageInfo {
endCursor
startCursor
hasNextPage
hasPreviousPage
}
}
}
}
Dans cet exemple, pageInfo.startCursor
donne le curseur pour le premier élément de la page. pageInfo.endCursor
donne le curseur pour le dernier élément de la page. pageInfo.hasNextPage
et pageInfo.hasPreviousPage
indiquent sâil existe une page avant et aprĂšs la page retournĂ©e.
Changement du nombre dâĂ©lĂ©ments par page
Les arguments first
ou last
. contrĂŽlent le nombre dâĂ©lĂ©ments retournĂ©s. Le nombre maximal dâĂ©lĂ©ments que vous pouvez extraire Ă lâaide de lâargument first
ou last
est de 100. Vous devrez peut-ĂȘtre demander moins de 100 Ă©lĂ©ments si votre requĂȘte touche un grand nombre de donnĂ©es afin dâĂ©viter dâatteindre une limite de dĂ©bit ou de Nodes. Pour plus dâinformations, consultez « Rate limits and query limits for the GraphQL API ».
Parcourir le jeu de donnĂ©es Ă lâaide de la pagination
Une fois que vous avez retournĂ© un curseur Ă partir dâune requĂȘte, vous pouvez utiliser le curseur pour demander la page suivante des rĂ©sultats. Pour ce faire, vous allez utiliser lâargument after
ou before
et le curseur.
Par exemple, en supposant que la pageInfo.endCursor
valeur de lâexemple prĂ©cĂ©dent Ă©tait Y3Vyc29yOnYyOpHOUH8B7g==
, vous pouvez utiliser cette requĂȘte pour demander la page suivante des rĂ©sultats :
query($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) {
pullRequests(first: 1, after: "Y3Vyc29yOnYyOpHOUH8B7g==") {
nodes {
createdAt
number
title
}
pageInfo {
endCursor
hasNextPage
hasPreviousPage
}
}
}
}
Vous pouvez continuer Ă envoyer des requĂȘtes avec la nouvelle valeur pageInfo.endCursor
retournĂ©e dans la rĂ©ponse jusquâĂ ce quâil ne reste aucune page Ă parcourir, indiquĂ©e en pageInfo.hasNextPage
retournant false
.
Si vous avez spĂ©cifiĂ© lâargument last
au lieu de lâargument first
, la derniÚre page de résultats est retournée en premier. Dans ce cas, vous allez utiliser la valeur pageInfo.startCursor
et lâargument before
pour obtenir la page précédente des résultats. Une fois pageInfo.hasPreviousPage
retourné false
, vous avez atteint la derniĂšre page. Par exemple :
query($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) {
pullRequests(last: 1, before: "R3Vyc29yOnYyOpHOHcfoOg==") {
nodes {
createdAt
number
title
}
pageInfo {
startCursor
hasPreviousPage
}
}
}
}
Ătapes suivantes
Vous pouvez utiliser le SDK Octokit de GitHub et le plugin octokit/plugin-paginate-graphql
pour prendre en charge la pagination dans vos scripts. Pour plus dâinformations, consultez plugin-paginate-graphql.js.