【问题标题】:Azure-devops rest api - pagination and rate limitAzure-devops rest api - 分页和速率限制
【发布时间】:2021-01-07 05:36:01
【问题描述】:

我正在尝试提取 Azure-Devops 实体数据(团队、项目、存储库、成员等)并在本地处理该数据, 我找不到任何关于速率限制和分页的文档, 有人有这方面的经验吗?

members api上有一些分页文档:
https://docs.microsoft.com/en-us/rest/api/azure/devops/memberentitlementmanagement/members/get?view=azure-devops-rest-6.0

但这是唯一的,我找不到任何 git 实体的任何文档,
例如:存储库。
https://docs.microsoft.com/en-us/rest/api/azure/devops/git/repositories/list?view=azure-devops-rest-6.0

如果有人能给我指出正确的文档, 或者对这些主题有所了解会很棒。

谢谢。

【问题讨论】:

    标签: azure-devops-rest-api


    【解决方案1】:

    我找不到任何关于速率限制和分页的文档,有人有这方面的经验吗?

    有一个关于Service limits and rate limits的文档,介绍了所有项目和组织都必须遵守的服务限制和速率限制。

    对于速率限制:

    Azure DevOps 服务与许多软件即服务解决方案一样,使用 多租户以降低成本并增强可扩展性和 表现。这使用户容易受到性能问题的影响,并且 甚至在共享资源的其他用户出现高峰时中断 他们的消费。为了解决这些问题,Azure DevOps Services 限制个人可以消耗的资源和数量 他们可以对某些命令提出的请求。当这些限制是 超出,后续请求可能会被延迟或阻止。

    详情可参考Rate limits documentation

    对于分页,通常 REST API 会有分页响应,而 ADO REST API 通常在每个响应中的每页限制为 100 / 200(取决于哪个 API)。获取下一页信息的方法是引用响应头 x-ms-continuationtoken 并将其用作下一个请求参数 continuationToken

    但微软没有很好地记录这一点 - 这应该在每个支持 continuation 令牌的 API 调用中提到:

    Builds - List

    GET https://dev.azure.com/{organization}/{project}/_apis/build/builds?definitions={definitions}&continuationToken={continuationToken}&maxBuildsPerDefinition={maxBuildsPerDefinition}&deletedFilter={deletedFilter}&queryOrder={queryOrder}&branchName={branchName}&buildIds={buildIds}&repositoryId={repositoryId}&repositoryType={repositoryType}&api-version=5.1
    

    如果我将上面的 REST API 与 $top=50 一起使用,如预期的那样,我会得到 50 个返回和一个名为“x-ms-continuationtoken”的标头,那么我们可以使用 continuationtoken 循环输出结果:

    您可以查看similar thread 了解更多详情。

    【讨论】:

    • 感谢您的详细解答!我尝试使用top=1 进行查询,但它只是忽略了...关于continuationToken 参数,我认为请求之间有所不同,至于获取成员它是pagingToken docs.microsoft.com/en-us/rest/api/azure/devops/… 如果没有文档它,那我猜这是反复试验?
    • @Samion,同意你的看法。对于pagingToken ,我也只能在get成员中看到,没有提供任何其他文档。但是,对于分页,我们总是使用continuationToken 。而pagingToken 是一个字符串,用于从成员列表的开头获取与否,不用于分页。
    【解决方案2】:

    我认为对于大多数 API,您的查询参数为 $top/$skip。您可以使用这些参数进行分页。假设默认运行在响应中提供 200 个文档。对于下一次运行,通过在请求的查询参数中提供 $skip=200 来跳过这 200 项,以获取接下来的 200 项。您可以继续迭代,直到响应的计数属性变为 0。

    对于那些没有这些参数的 api,您可以使用 Leo Liu-MSFT 提到的 continuation-token。

    【讨论】:

    • 谢谢@Ankit,我已经使用了$top$skip,正如你所建议的那样,在不支持令牌分页的地方,尽管仍有一些api(到目前为止我偶然发现了一个) ) 也不支持:docs.microsoft.com/en-us/rest/api/azure/devops/git/repositories/…
    • 是的@Samion,我相信微软应该提供更好的文档并支持对其余 api 进行分页。
    【解决方案3】:

    看来您可以通过 $topcontinuationToken 列出 Azure Git Refs。

    文档在这里:

    https://docs.microsoft.com/en-us/rest/api/azure/devops/git/refs/list?view=azure-devops-rest-6.0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      相关资源
      最近更新 更多