API GitHub: получение всех папок и файлов в одном запросе GET

В API GitHub я могу выполнить запрос 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, но они не предоставляют способ сделать это. Очень вероятно, что просто нет способа получить все файлы и папки в одном запросе, но я хотел попросить здесь подтвердить, что у меня нет другого варианта.

Ответ 1

Единственный способ сделать это с помощью одного запроса - получить текущее содержимое в виде архива: http://developer.github.com/v3/repos/contents/#get-archive-link

На самом деле, это 2 запроса, так как исходный ответ является перенаправлением 302.

Ответ 2

Вам нужно будет сделать индивидуальный GET для каждого из этих URL-адресов, предоставленных API. Вы должны проверить заголовки ответов, которые вы получаете для значений "ETag" или "Last-Modified", и использовать их для предотвращения повторной загрузки файла каждый раз, когда запрашивается ваш веб-сайт. Предполагая, что содержимое изменилось, вы также сохраните свой ratelimit.