1

我正在尝试使用 github api 获取给予develop存储库分支的所有提交,test但无论我如何传递查询参数,我总是得到第一页。不确定我发送的请求有什么问题。

curl -u username:$token -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ORGANIZATION_NAME/test/commits/develop

我总是得到第一页。我尝试使用此处给出的查询参数

4

1 回答 1

1

看起来您正在访问错误的端点。您要发送到的那个是this,在那里您只会得到一个提交(在您的情况下是最新的develop提交)。

您需要为您的应用程序实现一些分页逻辑并访问此端点:/repos/{owner}/{repo}/commits.

因此,例如,要获取开发分支的提交,您将发送这样的请求:

curl -H "Authorization: XYZ" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ACCNAME/REPO/commits\?sha\=develop

(如果您使用的是octokit,它会更漂亮,但这只是一个示例 :))

现在,为了让您分页,您还需要查询per_pageandpage参数并检查您是否已达到限制。

基本上,使用以下查询:

curl -H "Authorization: XYZ" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ACCNAME/REPO/commits\?sha\=develop\&per_page\=X\&page\=Y

您传递给请求的参数在哪里X和是。一旦你得到响应,你检查数组的长度(因为你会得到一个提交数组)是否等于. 如果是,请执行另一个请求,但这次是 increment ,这样您将获得下一页。循环这个过程,直到你得到的响应小于required ,因为这样你就会知道你会从你的 repo 中得到最后的提交。YcurlXY+1X


节点中的示例(免责声明,未正确编写的代码)

let allCommits = [];

let call = function(n, y) {
    return new Promise((resolve, reject) => {
        getCommits(function(statusCode, result) {
            allCommits.push(result);
            if (result.length === y) {
               call(n + 1, y);
            }
        }, n, y);
    });
};

如果getCommits您的功能是从分支获取一系列提交,path定义为path: '/repos/ACC_NAME/REPO/commits?sha=develop&page=' + n + '&per_page=' + y,那么最后您将拥有allCommits数组中的所有提交页面。最后你只需要把它弄平,但是有更好的 js 技能的人可以提供一种更优雅的方式来做到这一点。

于 2020-10-27T19:13:21.457 回答