【问题标题】:GitHub API: Fetch all folders and Files in Single GET RequestGitHub API:在单个 GET 请求中获取所有文件夹和文件
【发布时间】:2013-02-06 14:28:09
【问题描述】:

在 GitHub API 中,我可以发出 GET 请求

https://api.github.com/repos/owner/repo/git/trees/master?recursive=1

递归地获取存储库的所有树。除了给我所有的目录之外,它还给了我可以用来下载单个文件的 URL:

[...]
{
    "mode": "100644",
    "type": "blob",
    "sha": "abc1234",
    "path": "path/to/file.txt",
    "size": 104361,
    "url": "https://api.github.com/repos/owner/repo/git/blobs/abc1234"
},
[...]

虽然recursive=1 块使我不必为存储库中的每个目录发出新的 GET 请求,但我仍然必须对每个文件进行单独调用。我查看了GitHub API Docs,但他们没有提供这样做的方法。很可能根本没有办法在单个请求中获取所有文件和文件夹,但我想在这里询问以确认我没有其他选择。

【问题讨论】:

  • 请提供一些信息,为什么您需要所有文件。您是在某些服务器端应用程序上使用它们,还是在浏览器中调用它们?
  • 我需要导入存储库中的所有文件以在其关联的网站上显示它们。它是通过 Git 更新并导入网站的文档文件的集合。
  • 怎么导入的?为什么需要使用 API 而不是下载 zip,或者只是克隆项目?
  • 我目前正在导入 zip 文件,如果我需要重新使用 REST API,将返回此问题。另外,我为什么需要这样做真的很重要吗?我只是在寻找如何做的答案......

标签: github github-api


【解决方案1】:

使用单个请求执行此操作的唯一方法是将当前内容作为存档获取: https://docs.github.com/en/rest/reference/repos#download-a-repository-archive

实际上是 2 个请求,因为初始响应是 302 重定向。

【讨论】:

    【解决方案2】:

    您必须为 API 提供的每个 URL 创建单独的 GETs。您应该检查收到的响应的标题中的“ETag”或“Last-Modified”值,并使用它们来防止每次查询您的网站时都必须重新下载文件。假设内容已更改,您还将保存您的速率限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多