graphql - 如何使用GraphQL界面从GitLab部署中检索所有用户?

标签 graphql gitlab gitlab-api

我正在尝试从GitLab加载用户信息,以便可以将用户名与问题相关联。查询问题时,受让人用户名不直接可用。而是可以使用用户ID。
如果我在GitLab部署上使用/-/graphql-explorer端点执行此GraphQL查询:

query {                                                                                                                                                                                       
  users {                                                                                                                                                                                     
    nodes {                                                                                                                                                                                   
      id                                                                                                                                                                                      
      name                                                                                                                                                                                    
      username                                                                                                                                                                                
    }                                                                                                                                                                                         
  }
}
然后返回91位用户。但是,显然这并不是部署中的所有用户。我知道有一些用户存在,但不包含在结果中。我可以使用此GraphQL查询单独查询它们:
query {
  user(username: "someusername") {
    id
  }
}
并收到似乎正确描述用户的结果。
为什么从此查询的结果中省略了一些用户?我知道较大的结果集需要处理分页,但是默认页面大小应该为100,并且我收到的结果少于此。此外,如果我请求pageinfo并在生成的endCursor之后询问用户,则不会收到任何商品。
如何提交一个查询,让我获得所有用户?失败了,我该如何提交一个查询,该查询将使我成为一个组的所有用户(或者失败了,则为项目列表)?

最佳答案

documentation:

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/

相关文章:

django-models - 在 graphene/graphene_django 中扩展查询参数

Docker 列表容器 - Gitlab Runner

Gitlab升级: getting 500 error on certain pages

某些项目的 GitLab Pages API 404 错误

curl - 如何使用 GitLab API 列出子组的项目?

graphql - 以正则表达式为变量的 Gatsby graphql

GraphQL:是否可以搜索嵌套字段?

graphql - 如何在 graphql dotnet 中使用 pascal 大小写代替 Camel 大小写

docker - Gitlab选项作为Docker镜像存储库

javascript - 使用 GitLab API 和 Node.js 下载 GitLab 存储库存档