Graphql API 分页问题
Posted
技术标签:
【中文标题】Graphql API 分页问题【英文标题】:Graphql API pagination issue 【发布时间】:2022-01-05 05:26:30 【问题描述】:我想从特定用户那里获取所有存储库。如果用户有很多仓库,最好使用分页。
据我所见,我们可以传递 first 和 last 属性。但是如果我想在 10 到 20 之间获取存储库怎么办?
query MyQuery
user(login: "someuser")
repositories(first:10" )
totalCount
nodes
name
您可以在这里访问 => https://docs.github.com/en/graphql/overview/explorer
提前致谢
【问题讨论】:
【参考方案1】:GitHub GraphQL API 使用流行的cursor-based pagination pattern。每条记录都有一个不透明的、类似 id 的光标。从查询中返回光标。将其用作下一个查询的输入。 Apollo Client has tools 来帮忙。
repository(name: "apollo-client", owner: "apollographql")
issues(last: 10, after: "Y3Vyc29yOnYyOpHOP2I0Sw==")
edges
node
createdAt
title
cursor
【讨论】:
【参考方案2】:你最多可以得到 100 个节点,但是你需要使用分页,这是通过为 hasNextPage
和 endCursor
获取 pageInfo
来完成的
例如我可以通过以下方式获得前 100 个存储库:
query ReposByUser
user(login: "cpswan")
repositories(first: 100)
totalCount
nodes
name
pageInfo
hasNextPage
endCursor
响应将以:
结尾 "pageInfo":
"hasNextPage": true,
"endCursor": "Y3Vyc29yOnYyOpHOFdXRZQ=="
所以我可以通过以下方式获取下一页:
query ReposByUser
user(login: "cpswan")
repositories(first: 100 after: "Y3Vyc29yOnYyOpHOFdXRZQ==")
totalCount
nodes
name
pageInfo
hasNextPage
endCursor
这一次以这告诉我没有更多的页面结束:
"pageInfo":
"hasNextPage": false,
"endCursor": "Y3Vyc29yOnYyOpHOGb3wAQ=="
【讨论】:
要看到上一页,我想我需要之前使用它。但是 hasNextPage 和 hasPreviousPage 返回 false。我正在使用 startCursor 如果hasNextPage
和hasPreviousPage
都为假,则意味着totalCount
低于最大页面限制(在我的示例中为100)。在大多数情况下,是从前 100 个页面开始,还是从前 100 个页面开始,或者从最后 100 个页面开始,并没有什么区别。以上是关于Graphql API 分页问题的主要内容,如果未能解决你的问题,请参考以下文章