如何通过 AzureDevOps REST 只获取最新版本的包 API

How to get only the latest version of a package via AzureDevOps REST API

下面API return是特定包的所有版本。为了获得该包的最新版本,我可以使用 returned 响应中的 isLatest:true 数据。

https://docs.microsoft.com/en-us/rest/api/azure/devops/artifacts/artifact%20%20details/get%20package%20versions?view=azure-devops-rest-6.0

但我想知道是否有办法在响应中只获取最新版本而不是所有版本?可能吗?

如果不可能,那么第二个问题 - 最新版本是否始终是响应中的第一项? (我假设 return 项目数有限制(1000?)所以我想知道如果我需要获取最新版本,一次 API 调用是否总是足够的。

对于第一个问题,恐怕没有out-of-the-box参数到return直接通过restapi最新版本的一个包,因为isLatest 参数未在 rest api url 至 return 最新版本中提供。另外,url参数中没有提供$top参数来指定returned计数。

Will latest version be always the first item in the response?

对于第二个问题,答案是,最新版本将始终是响应中的第一项。

因此,作为解决方法,我们可以简单地通过 powershell 脚本过滤响应 return 最新的软件包版本。

$url = 'https://feeds.dev.azure.com/{org}/_apis/packaging/Feeds/{feedId}/Packages/{packageId}/versions?api-version=6.0-preview.1';

$token = "{PAT}"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get 

$result = $response.value | Where {$_.isLatest -eq "true"} #|

Write-Host "results = $($result | ConvertTo-Json -Depth 100)"

If there is no possibility of that, then a second question - Will latest version be always the first item in the response?

答案是肯定的。最新版本始终是响应中的第一项。

作为测试,我发布了版本为 1.0.02.0.0 的测试包到我的提要,然后发布了版本 1.0.1-preview1.21.0.1。但是 Azure devops 将按照包版本的顺序排序:

因此,我们可以使用带有 powershell 参数 Select-Object -first 1 的 REST API 来获取最新的软件包版本:

$connectionToken="Your PAT"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

$url = 'GET https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/Packages/{packageId}/versions?api-version=6.0-preview.1
'
$PackageInfo = (Invoke-RestMethod -Uri $url -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}) 

$LatestVersion= $PackageInfo.value.version | Select-Object -first 1


Write-Host "Latest package Version = $LatestVersion"

测试结果: