在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,但他们没有办法做到这一点。很可能根本没有办法在一个请求中获取所有文件和文件夹,但我想在这里要求验证我没有其他选择。
答案 0 :(得分:7)
使用单个请求执行此操作的唯一方法是将当前内容作为存档获取: http://developer.github.com/v3/repos/contents/#get-archive-link
实际上,这是2个请求,因为初始响应是302重定向。
答案 1 :(得分:1)
您必须为API提供的每个网址单独GET
。您应该检查“ETag”或“Last-Modified”值的响应标题,并使用这些标题来防止每次查询网站时都必须重新下载文件。假设内容已更改,您还将保存您的ratelimit。