如何在GitHub GraphQL Search中获取仓库字段及实现类似Select *功能?
解决GitHub GraphQL v4仓库字段查询与"SELECT *"替代方案
嘿,刚好我之前也折腾过GitHub的GraphQL API,来给你说说怎么解决这两个问题:
一、找到你要的仓库字段
你要的size、score、open issues其实都有对应的字段,只是命名或者位置和v3有点不一样:
- size:对应Repository类型里的
diskUsage字段,单位是KB,能直接返回仓库的存储空间大小 - score:这个是搜索结果专属的字段,只有在执行
search查询时,每个Repository节点才会携带score(代表搜索匹配的相关度得分),单独查询单个仓库是没有这个字段的 - open issues:有两种方式获取:
- 直接用
openIssues字段,返回当前开放的issue总数 - 如果需要更灵活的统计(比如排除pull request),可以用
issues(states: [OPEN]) { totalCount },还能加上filter: { isPullRequest: false }来过滤掉PR
- 直接用
给你个完整的查询示例,把这些字段都包含进去:
query SearchGitHubRepos { search(query: "topic:react stars:>500", type: REPOSITORY, first: 5) { nodes { ... on Repository { nameWithOwner diskUsage # 仓库大小 score # 搜索匹配得分 openIssues # 开放issue数量 # 更精确的开放issue统计(排除PR) issues(states: [OPEN], filter: { isPullRequest: false }) { totalCount } } } } }
二、关于类似SQL的"SELECT *"
很遗憾,GitHub GraphQL API不支持通配符查询所有字段,这其实是GraphQL的设计核心之一——强制按需获取字段,避免返回冗余数据。不过有个小技巧可以提高效率:
- 如果你用GitHub官方的GraphQL Explorer(网页端工具),可以选中Repository类型后,用快捷键
Ctrl+Enter(或者点击展开按钮)快速插入该类型下的所有字段,不用手动一个个敲 - 第三方GraphQL客户端(比如Insomnia、Postman)也大多支持自动补全和批量插入字段的功能,能帮你省不少事
总之,虽然没有原生的SELECT *,但借助工具可以快速生成包含所有字段的查询语句~
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

