如何通过单次GitHub API调用按名称获取仓库列表与分支数量
问题解决方案
你不需要发起多次网络调用就能拿到分支数量字段,根据你需要的分支类型对应调整即可:
- 如果你需要的是仓库被派生(Fork)的总数量:你当前在用的REST搜索接口本身就返回这个字段,你之前没拿到大概率是请求头配置错误或者响应解析遗漏。
只需要在请求头中添加标准v3 API标识Accept: application/vnd.github.v3+json,解析响应时取单条仓库数据下的forks_count字段即可,这个字段就是派生仓库的总数量,和名称、描述等字段一起在单次请求中返回,不需要额外接口调用。
单条仓库返回的核心字段结构参考:{ "name": "仓库名", "description": "仓库描述", "forks_count": 1280, // 派生分支总数量 "stargazers_count": 5600 // 其余你需要的基础字段 } - 如果你需要的是仓库内部本地分支(如main、dev、feature类分支)的总数量:REST版本的搜索接口固定返回字段里不包含这个值,也没有提供字段扩展参数,此时只需要换用GitHub GraphQL接口发起单次请求即可,完全不需要逐个调用仓库详情接口。
你只需要向https://api.github.com/graphql端点(和REST接口同域名,不需要换域名)发起POST请求,携带你的GitHub授权token,请求体传入如下查询语句即可一次性拿到名称、描述、本地分支总数、派生数等所有你需要的字段:
你可以把搜索关键词、每页数量、分页游标作为变量传入,分页逻辑和REST接口一致,单次请求就能拿到全页所有仓库的全部所需字段,不会产生多余网络调用。query SearchRepos($keyword: String!, $pageSize: Int!, $after: String) { search(query: $keyword, type: REPOSITORY, first: $pageSize, after: $after) { nodes { ... on Repository { name description forks { totalCount } refs(refPrefix: "refs/heads/", first: 0) { totalCount # 仓库本地分支总数量 } } } pageInfo { endCursor hasNextPage } } }
补充说明:GraphQL接口本身就是为了解决REST接口字段固定、容易出现过量请求/数据缺失问题设计的,你后续如果需要增减返回字段,只需要调整查询语句里的字段列表即可,不需要修改请求地址或额外发起调用。
内容的提问来源于stack exchange,提问作者Najam
相关产品推荐
相关产品推荐

