我在滥用GitHub API吗?如果是这样,还有什么选择?

时间:2019-06-30 11:50:07

标签: api http-headers

我正在使用自己的个人网站:https://aleksandrhovhannisyan.github.io/

目前,我所有的项目都在HTML中进行了硬编码。这使得难以维护它们。例如,如果一个项目被加了星标,我必须进入并手动更新星数,然后推送一次提交。它可以正常工作,并且从用户体验的角度来看它很快,但是效率很低。

我一直在研究一种备选方案,该方案将根据从GitHub API中获取的数据从存储卡中自动填充网站的项目部分:

https://developer.github.com/v3/repos/

根据顶级API文档(https://developer.github.com/v3/#user-agent-required):

  

所有API请求都必须包含有效的User-Agent标头。没有User-Agent标头的请求将被拒绝。我们要求您将GitHub用户名或应用程序名称用于User-Agent标头值。这使我们可以在出现问题时与您联系。

的确是这样。当我在处理脚本并在本地刷新页面时,由于没有设置User-Agent标头,最终我被禁止了403的错误阻止。

但是有一个问题:当我在Chrome中打开网站时,控制台会显示此错误:

  

index.js:51拒绝设置不安全的标头“ User-Agent”

我的理解是,这是适当的预防措施,并且应该确实在某种服务器上设置用户代理标头。 Chrome最终确实会加载数据,尽管加载速度比Firefox慢,但Firefox似乎并未对User-Agent的使用施加任何此类限制。

像我这样的个人网站不是使用GitHub API并设置User-Agent请求标头的理想选择吗?如果是这样,除了对所有内容进行硬编码之外,我还有什么其他选择?

1 个答案:

答案 0 :(得分:0)

似乎问题不仅仅在于设置User-Agent标头,还在于我正在发出的请求数。

根据GitHub自己的文档:

  

对于未经身份验证的请求,速率限制允许每小时最多60个请求。未经身份验证的请求与原始IP地址相关联,而不与发出请求的用户相关联。

这对我的最终用户来说无关紧要,因为他们不会(希望)刷新很多次,但是对于测试/开发来说却很重要,因为我经常刷新以查看更改结果(因此用尽了我的可用请求)。我通过发送垃圾邮件并按https://developer.github.com/v3/#rate-limiting运行curl -i https://api.github.com/users/my-username来检查此问题:

enter image description here

之所以如此之快用完请求,是因为我的JavaScript设计存在缺陷:我对我感兴趣的每个存储库都提出了一个单独的请求。相反,我可能要做的是创建带有URL的字典我有兴趣显示的回购单,然后对我的帐户中的所有公共回购单请求。然后,我可以遍历每个存储库,并检查它是否在要显示的存储库列表中;如果是这样,我将继续为其创建项目卡。这样,我每次刷新只是为了获取回购信息就不会发送6个请求。