如何通过 AzureDevOps REST 只获取最新版本的包 API
How to get only the latest version of a package via AzureDevOps REST API
下面API return是特定包的所有版本。为了获得该包的最新版本,我可以使用 returned 响应中的 isLatest:true 数据。
但我想知道是否有办法在响应中只获取最新版本而不是所有版本?可能吗?
如果不可能,那么第二个问题 - 最新版本是否始终是响应中的第一项? (我假设 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.0
、2.0.0
的测试包到我的提要,然后发布了版本 1.0.1-preview1.2
、1.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"
测试结果:
下面API return是特定包的所有版本。为了获得该包的最新版本,我可以使用 returned 响应中的 isLatest:true 数据。
但我想知道是否有办法在响应中只获取最新版本而不是所有版本?可能吗?
如果不可能,那么第二个问题 - 最新版本是否始终是响应中的第一项? (我假设 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.0
、2.0.0
的测试包到我的提要,然后发布了版本 1.0.1-preview1.2
、1.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"
测试结果: