{"meta":{"title":"Como usar paginação na API GraphQL","intro":"Saiba como percorrer conjuntos de dados usando a paginação baseada em cursor com a API GraphQL.","product":"API GraphQL","breadcrumbs":[{"href":"/pt/graphql","title":"API GraphQL"},{"href":"/pt/graphql/guides","title":"Guias"},{"href":"/pt/graphql/guides/using-pagination-in-the-graphql-api","title":"Paginação"}],"documentType":"article"},"body":"# Como usar paginação na API GraphQL\n\nSaiba como percorrer conjuntos de dados usando a paginação baseada em cursor com a API GraphQL.\n\n## Sobre paginação\n\nA API GraphQL do GitHub limita o número de itens em que você pode efetuar fetch em uma única solicitação, para proteger contra solicitações excessivas ou abusivas aos servidores do GitHub. Ao usar a API GraphQL, você deve fornecer um argumento `first` ou `last` em todas as conexões. O valor desses argumentos deve ficar entre 1 e 100. A API GraphQL retornará o número de conexões especificado pelo argumento `first` ou `last`.\n\nSe os dados que você está acessando tiverem mais conexões do que o número de itens especificado pelo argumento `first` ou `last`, a resposta será dividida em \"páginas\" menores do tamanho especificado. É possível efetuar fetch em uma dessas páginas por vez, até que todo o conjunto de dados tenha sido recuperado. Cada página contém o número de itens especificado pelo argumento `first` ou `last`, a menos que seja a última página, que talvez contenha um número menor de itens.\n\nEste guia demonstra como solicitar páginas adicionais de resultados para respostas paginadas, como alterar o número de resultados retornados em cada página e como escrever um script para buscar várias páginas de resultados.\n\n## Como solicitar um `cursor` em sua consulta\n\nAo usar a API GraphQL, você usa cursores para percorrer um conjunto de dados paginado. O cursor representa uma posição específica no conjunto de dados. Você pode obter o primeiro e o último cursor em uma página consultando o objeto `pageInfo`. Por exemplo:\n\n```graphql\nquery($owner: String!, $name: String!) {\n  repository(owner: $owner, name: $name) {\n    pullRequests(first: 100, after: null) {\n      nodes {\n        createdAt\n        number\n        title\n      }\n      pageInfo {\n        endCursor\n        startCursor\n        hasNextPage\n        hasPreviousPage\n      }\n    }\n  }\n}\n```\n\nNeste exemplo, `pageInfo.startCursor` fornece o cursor para o primeiro item na página.\n`pageInfo.endCursor` fornece o cursor para o último item na página.\n`pageInfo.hasNextPage` e `pageInfo.hasPreviousPage` indicam se há uma página antes e depois da que foi retornada.\n\n## Como alterar o número de itens por página\n\nOs argumentos `first` e `last` controlam quantos itens são retornados. O número máximo de itens em que você pode efetuar fetch usando o argumento `first` ou `last` é 100. Talvez seja necessário solicitar menos de 100 itens se a consulta resultar em muitos dados, para evitar atingir um limite de uma taxa ou nó. Para saber mais, confira [Limites de taxas e limites de consultas para a API GraphQL](/pt/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api).\n\n## Como percorrer o conjunto de dados usando paginação\n\nDepois de um cursor ser retornado de uma consulta, você pode usá-lo para solicitar a próxima página de resultados. Para fazer isso, você usará o argumento `after` ou `before` e o cursor.\n\nPor exemplo, supondo que o valor `pageInfo.endCursor` do exemplo anterior era `Y3Vyc29yOnYyOpHOUH8B7g==`, você pode usar essa consulta para solicitar a próxima página de resultados:\n\n```graphql\nquery($owner: String!, $name: String!) {\n  repository(owner: $owner, name: $name) {\n    pullRequests(first: 1, after: \"Y3Vyc29yOnYyOpHOUH8B7g==\") {\n      nodes {\n        createdAt\n        number\n        title\n      }\n      pageInfo {\n        endCursor\n        hasNextPage\n        hasPreviousPage\n      }\n    }\n  }\n}\n```\n\nVocê pode continuar a enviar consultas com o novo valor `pageInfo.endCursor` retornado na resposta até que não haja mais páginas para percorrer, indicado por `pageInfo.hasNextPage` retornando `false`.\n\nSe você especificou o argumento `last` em vez do `first`, a última página de resultados será retornada primeiro. Nesse caso, você usará o valor o `pageInfo.startCursor` e o argumento `before` para obter a página anterior de resultados. Quando `pageInfo.hasPreviousPage` tiver retornado `false`, você terá chegado à última página. Por exemplo:\n\n```graphql\nquery($owner: String!, $name: String!) {\n  repository(owner: $owner, name: $name) {\n    pullRequests(last: 1, before: \"R3Vyc29yOnYyOpHOHcfoOg==\") {\n      nodes {\n        createdAt\n        number\n        title\n      }\n      pageInfo {\n        startCursor\n        hasPreviousPage\n      }\n    }\n  }\n}\n```\n\n## Próximas etapas\n\nVocê pode usar o SDK Octokit do GitHub e o plugin `octokit/plugin-paginate-graphql` para dar suporte à paginação em seus scripts. Para obter mais informações, consulte [plugin-paginate-graphql.js](https://github.com/octokit/plugin-paginate-graphql.js)."}