首页 > 解决方案 > 如何使用 Azure DevOps REST API 计算所有拉取请求

问题描述

我正在尝试使用 Azure DevOps REST API 来计算我们存储库中拉取请求的总数,并最终使用它来希望从 git 数据中获得一些更有用的信息。

我尝试使用对存储库的 GET 请求来返回拉取请求列表,但 Azure API 将每个请求的响应限制为 101。您可以使用 $top 和 $skip 来更改返回的响应数量和响应,并使用 $count 来计算返回的响应。然而,这仍然将结果限制为 1,000 的绝对最大值并返回 PR 中包含的整个数据集,当我真的只需要知道其中的实例数时,我不需要它的数据完全返回,因为这会在大型回购中产生巨大的结果。

这是我正在使用的 GET 请求:

https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repository}/pullrequests?$top=999&$count=true&searchCriteria.status=all&api-version=5.0

这是我用来返回项目计数的测试脚本,邮递员

var body = JSON.parse(responseBody);
tests[body.value.length + " Pull Requests in this Repository" ] = true;

正如预期但不希望的那样,这将返回响应计数为 101。非常感谢任何提示和技巧!

标签: gitazure-devopspostmanazure-devops-rest-api

解决方案


powershell的简单示例代码:

function GetPullRequest{
    param(
[string]$org,
[string]$project,
[string]$repo,
[string]$token
)
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "test",$token)))
    $count=0
    $i=0
    do{
        $uri="https://dev.azure.com/$org/$project/_apis/git/repositories/$repo/pullRequests?api-version=5.0&`$top=100&`$skip=$i"
        $i+=100
        Write-Output $uri
        $result= Invoke-RestMethod -Method Get -Uri $Uri -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $bodyJson
        Write-Output $result.Count
        $count+=$result.Count
        if($result.Count-lt 100){
            break;
        }
    }while($true)
    write-output "Finish. Total Pull Request count: $count";
}

GetPullRequest -org "your organization" -project "your teamproject" -repo "your repository" -token "your personal access token"

推荐阅读