我正在尝试从GitLab加载用户信息,以便可以将用户名与问题相关联。查询问题时,受让人用户名不直接可用。而是可以使用用户ID。
如果我在GitLab部署上使用/-/graphql-explorer
端点执行此GraphQL查询:
query {
users {
nodes {
id
name
username
}
}
}
然后返回91位用户。但是,显然这并不是部署中的所有用户。我知道有一些用户存在,但不包含在结果中。我可以使用此GraphQL查询单独查询它们:query {
user(username: "someusername") {
id
}
}
并收到似乎正确描述用户的结果。为什么从此查询的结果中省略了一些用户?我知道较大的结果集需要处理分页,但是默认页面大小应该为100,并且我收到的结果少于此。此外,如果我请求
pageinfo
并在生成的endCursor
之后询问用户,则不会收到任何商品。如何提交一个查询,让我获得所有用户?失败了,我该如何提交一个查询,该查询将使我成为一个组的所有用户(或者失败了,则为项目列表)?
最佳答案
By default, GitLab’s GraphQL API will return only the first 100 records of any collection. This can be changed by using first or last arguments. Both arguments take a value, so first: 10 will return the first 10 records, and last: 10 the last 10 records.
因此,您必须自己进行分页,例如第一个查询:
query {
users(first: 10) {
edges {
node {
id
name
username
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
然后使用PageInfo
结果值来知道您是否还有更多页面要获取,而游标ID是否要获取下一页,例如,您可以获得以下结果:...
"pageInfo": {
"endCursor": "eyJpZCI6Ijc****************zNjk0MDUwMDAgOVRDIn0",
"hasNextPage": true
}
因此,对于下一页,您必须查询:query {
users(first: 10, after: "eyJpZCI6IjcxMj**********************Ni4zNjk0MDUwMDAgOVRDIn0") {
edges {
node {
id
name
username
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
依此类推,直到hasNextPage
返回false
为止。有关分页和游标的更多信息,请参见GraphQL文档:https://graphql.org/learn/pagination/
关于graphql - 如何使用GraphQL界面从GitLab部署中检索所有用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63848594/