如何用Octokit查询组织内所有仓库的开放PR?
解决方法:使用GitHub搜索API实现跨仓库PR查询
你浏览器里用的那个URL是GitHub网页端的内部搜索接口,不属于官方公开的REST API范畴,所以直接用Octokit调用GET /pulls会返回404。要实现单次(或少量分页请求)获取组织所有开放PR,应该用官方提供的搜索拉取请求API,这个接口支持跨仓库筛选,完全符合你的需求。
具体实现代码(Octokit)
用Octokit的search.pulls方法即可,示例如下:
import { Octokit } from "octokit"; const octokit = new Octokit({ auth: "你的访问令牌" }); async function getAllOrgOpenPRs(orgName) { const prs = []; let page = 1; const perPage = 100; // 搜索API每页最多返回100条结果 while (true) { const response = await octokit.rest.search.pulls({ q: `is:open is:pr org:${orgName}`, per_page: perPage, page: page, }); prs.push(...response.data.items); // 检查是否还有下一页结果 if (response.data.items.length < perPage) { break; } page++; } return prs; } // 调用示例 getAllOrgOpenPRs("my-org-name").then(prs => { console.log(`找到${prs.length}个开放PR:`, prs); });
关键说明
- 搜索API的
q参数和你浏览器URL里的查询语法完全一致,支持org:、is:open、is:pr这些筛选条件 - 搜索API有结果上限(最多返回1000条匹配结果),如果你的组织开放PR超过这个数,可能需要结合其他筛选条件(比如按时间范围)拆分查询
- 相比遍历每个仓库查询,这个方法的效率高很多,只需要几次分页请求就能拿到所有结果,不用逐个仓库发起请求
为什么浏览器的URL能工作?
那个URL是GitHub网页端自己用的非公开接口,没有被纳入官方API文档,随时可能变更或限制访问,不建议在生产代码中依赖它。官方推荐的稳定方式就是用搜索API。
内容的提问来源于stack exchange,提问作者Graeme Perrow
相关产品推荐
相关产品推荐

