Jea*_*one 5 gitlab graphql gitlab-api
我正在尝试从 GitLab 加载用户信息,以便我可以将用户名与问题相关联。查询问题时,受让人用户名不是直接可用的。相反,用户 ID 可用。
如果我使用/-/graphql-explorerGitLab 部署上的端点执行此 GraphQL 查询:
query {
users {
nodes {
id
name
username
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后返回 91 个用户。不过,这显然不是部署中的所有用户。我知道有些用户存在,但未包含在结果中。我可以使用这个 GraphQL 查询单独查询它们:
query {
user(username: "someusername") {
id
}
}
Run Code Online (Sandbox Code Playgroud)
并收到似乎正确描述用户的结果。
为什么此查询的结果中省略了某些用户?我知道大型结果集需要处理分页,但默认页面大小应该是 100,我收到的结果比这少。此外,如果我pageinfo在结果之后请求并询问用户,endCursor我将不会收到任何物品。
如何提交查询以获取所有用户?如果做不到这一点,我如何提交一个查询来获取所有可能是 aa 组的受让人(或者,如果失败,则是项目列表)的所有用户?
从文档:
默认情况下,GitLab 的 GraphQL API 将仅返回任何集合的前 100 条记录。这可以通过使用第一个或最后一个参数来改变。两个参数都有一个值,所以 first: 10 将返回前 10 条记录,last: 10 将返回最后 10 条记录。
所以你必须自己做分页,你的第一个查询是例如:
query {
users(first: 10) {
edges {
node {
id
name
username
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用PageInfo结果值来知道您是否有更多页面要获取以及游标 ID 来获取下一页,例如您可以获得以下结果:
...
"pageInfo": {
"endCursor": "eyJpZCI6Ijc****************zNjk0MDUwMDAgOVRDIn0",
"hasNextPage": true
}
Run Code Online (Sandbox Code Playgroud)
因此,对于下一页,您必须查询:
query {
users(first: 10, after: "eyJpZCI6IjcxMj**********************Ni4zNjk0MDUwMDAgOVRDIn0") {
edges {
node {
id
name
username
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
Run Code Online (Sandbox Code Playgroud)
依此类推,直到hasNextPage返回false。
有关分页和游标的更多信息,请参阅 GraphQL 文档:https ://graphql.org/learn/pagination/
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |