如何通过GraphQL获取GitLab中的共享项目?
GitLab GraphQL 查询组内所有项目(含共享项目)方案
GitLab GraphQL 的 group.projects 字段默认仅返回组内直接项目及子组项目,无法直接获取共享到该组的项目。要实现与 REST 接口 GET /api/v4/groups/{groupId}/projects(默认启用with_shared)等效的功能,需要同时查询 sharedProjects 字段来获取共享项目,再将两类结果合并。
完整查询示例
query { group(fullPath: "{groupPath}") { requireTwoFactorAuthentication # 获取组内及子组的项目 projects(includeSubgroups: true, first: 100) { nodes { id name fullPath } pageInfo { endCursor hasNextPage } } # 获取共享到当前组的项目 sharedProjects(first: 100) { nodes { id name fullPath } pageInfo { endCursor hasNextPage } } } }
关键说明
projects(includeSubgroups: true):获取当前组及其所有子组下的直接项目,对应 REST 接口中include_subgroups=true的逻辑。sharedProjects:专门获取被共享到当前组的外部项目,这部分就是 REST 接口中with_shared=true返回的共享项目。- 分页处理:如果项目数量超过100,需要利用
pageInfo中的endCursor和hasNextPage进行分页查询,后续请求中通过after: "{endCursor}"参数获取下一页数据。 - 结果合并:在客户端需要将
projects.nodes和sharedProjects.nodes两个数组合并,可根据id字段去重(避免极端情况下的重复条目)。
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

