如何通过AzureDevOps REST API仅获取软件包的最新版本

问题描述

下面的API返回特定软件包的所有版本。为了获取该软件包的最新版本,我可以使用返回响应中的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

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

如果不可能的话,那么请问第二个问题-最新版本是否总是答复中的第一项? (我假设退货数量有限制(1000?),所以我想知道如果需要获取最新版本的API调用是否总是足够的。

解决方法

对于第一个问题,恐怕没有立即可用的参数可以直接通过rest api返回软件包的最新版本,因为rest中未提供isLatest参数api url返回最新版本。另外,在url参数中没有提供$top参数来指定返回的计数。

enter image description here

最新版本是否始终是响应中的第一项?

对于第二个问题,答案为,最新版本始终是回复中的第一项。

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

$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)"

enter image description here

,

如果不可能的话,那么再问第二个问题-最新版本将始终是答复中的第一项吗?

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

作为测试,我向源中发布了测试包,其版本为1.0.02.0.0,然后发布了版本1.0.1-preview1.21.0.1。但是,Azure开发人员将按照程序包版本进行排序:

enter image description here

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

$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"

测试结果:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...