node.js - Github API 获取 repo 的自述文件,不管它是如何命名的
问题描述
我试图在一堆 repos(我不拥有)中获取自述文件,我遇到的问题是有时人们以不同的方式命名自述文件(例如 README.md、README.MD、 Readme.md 或 readme.md)
我现在在做什么
GET https://api.github.com/repos/REPO_NAME/contents/README.md
问题是如果它以不同的方式命名,它不会返回自述文件。
也尝试使用
GET https://api.github.com/search/code?q=repo:REPO_NAME+filename:readme
但是我一直在达到搜索的 API 限制(因为我有很多我正在使用的存储库)
解决方案
您可以使用Github GraphQL API并为每个可能的文件名使用别名,例如:
readme1: object(expression: "master:README.md") {
...
}
readme2: object(expression: "master:README.MD") {
...
}
这个想法是您只对搜索和内容执行一个请求。您还可以添加更多repository
别名,并且每个请求的成本保持在 1 点,这大大降低了达到速率限制的机会。
例如,以下将获得 2 个存储库的 5 个文件名可能性的自述文件,此请求仅花费 1 分:
{
repo1: repository(name: "material-ui", owner: "mui-org") {
...RepoFragment
}
repo2: repository(name: "linux", owner: "torvalds") {
...RepoFragment
}
rateLimit {
cost
remaining
limit
}
}
fragment RepoFragment on Repository {
readme1: object(expression: "master:README.md") {
...ReadmeText
}
readme2: object(expression: "master:README.MD") {
...ReadmeText
}
readme3: object(expression: "master:readme.md") {
...ReadmeText
}
readme4: object(expression: "master:Readme.md") {
...ReadmeText
}
readme5: object(expression: "master:README") {
...ReadmeText
}
}
fragment ReadmeText on GitObject {
... on Blob {
text
}
}
在输出中:
"rateLimit": {
"cost": 1,
"remaining": 4977,
"limit": 5000
}
这意味着您可以通过动态构建请求,利用别名将存储库数组分割成上面的 graphql 别名。您只受到处理查询所需时间的限制,因此您必须拥有每个请求的最大存储库数。有关动态构建查询的示例,请参见这篇文章。另一个可能更简单的帖子
另外,请参阅graphql 资源限制文档
推荐阅读
- javascript - 通过 jQuery 设置图像源时,glide.js 中的最终图像不可见
- java - Mockito 可以在不单独指定每个参数匹配器的情况下模拟方法吗?
- java - 从 java 类构建复杂的 JSON 有效负载
- c++ - 如何处理线段相交检查中的拐角
- javascript - 欧拉问题5的解决方案:我的代码不起作用
- reactjs - 如何在 useState 中同步更改状态
- flutter - '列表
' 不是类型 'Map 的子类型 ' - java - 如何为仅在程序运行时调用的函数编写 JUnit 测试?
- reactjs - 在为 Spring Boot 后端和响应前端启用跨源时遇到问题
- xml - XSLT 1.0 对具有不同数据的多个节点进行汇总