我正在开发一个简单的包管理器GUI,它使用npm从Github安装包。
为了实现这一点,我需要具有特定“主题”的所有存储库的以下信息:
我的GUI会在每个会话中缓存这些数据,但可能会有很多人在不同的计算机上使用GUI。
查看Github v3 API documentation我能找到以下两个命令:
GET /search/repositories?q=topic:my-package-marker(Accept: application/vnd.github.mercy-preview+json
标题包含主题数据)。
对于上一个命令检索到的每个存储库,GET /repos/{repositoryName}/git/refs/tags
我对这种方法有一些顾虑:
Github文档说:
通过各种标准查找存储库。此方法每页最多返回100个结果。
这意味着客户端每次都需要遍历并下载所有页面。
Github文档还说:
费率限制
Search API具有自定义的速率限制。对于使用基本身份验证,OAuth或客户端ID和密钥的请求,您每分钟最多可以发出30个请求。对于未经身份验证的请求,速率限制允许您每分钟最多发出10个请求。
如果包裹超过30页,则会很快超出此限制。但是,即使每页的页面数量较少,我也需要获取每页100个存储库中每个页面的标签列表。
这是伪代码,看起来我必须做些什么来获取这些数据:
dataPages = { };
for each page in GET /search/repositories?q=topic:my-package-marker
with "Accept: application/vnd.github.mercy-preview+json"
{
dataPage = new DataPage();
for each entry in page
{
entry = new Entry();
entry.FullName = entry.full_name
entry.Description = entry.description
entry.Keywords = entry.topics
entry.Versions = { };
for each tag in GET /repos/{entry.full_name}/git/refs/tags
{
if (tag.ref starts with "refs/tags/v")
{
entry.Versions.Add(tag.ref substring from character index 11);
}
}
dataPage.Add(entry);
}
dataPages.Add(dataPage);
}
我想做什么?
从npm v5开始,您现在可以直接从Git存储库安装软件包。这非常有用,因为这意味着npm可以用于不适合node.js / npm生态系统的包。 npm非常适合这些软件包,但是npm注册表不适合托管这些软件包。
实现这一目标的最佳方式是什么?