GitLab API分页与RestAssured.如何在一个回复中获得所有页面?



我尝试从GitLab API获得所有问题。GitLab API允许出现分页问题,但每页最多100个:

https://docs.gitlab.com/ee/api/README.html分页正如我所看到的,我可以解析x-next-page标头并在结果中返回List<Response>,但是在一个响应中获得所有页面会更好。

我发现我可以使用pagination=keyset参数,但它没有帮助,我仍然得到每页100个问题。我的尝试:

return RestAssured.given()
.log().all()
.accept("json")
.header("PRIVATE-TOKEN", TOKEN)
.queryParam(STATE, "opened")
.queryParam("pagination", "keyset")
.queryParam("per_page", "100")
.when().get(url)
.then()
.extract()
.response();

我不熟悉这个API,但我可以从文档中得出结论,这是不可能的。

pagination=keyset只是实现分页的一种不同风格。您仍然必须使用分页。

默认的分页样式是基于偏移量的,其中您的查询显示类似">我的页面有100个条目长,我在第8页"。然后,服务器对问题进行排序,跳过前700个(您已经看到的第1-7页—这是偏移量),并返回第700-800个项目。

使用基于键集的样式,您的查询将说">我看到的最后一项ID为ABCDEF,我想要接下来的100项">。根据文档,这种方式更有效,可能是因为服务器存储项的方式。

我认为基于偏移量是默认的,因为这是其他api中更常见的分页实现方式。


这是一个很好的防御性API设计来强制一些上限。没有上限可能意味着服务器必须尝试为1000万个问题编写庞大的JSON/XML响应。懒惰的开发人员可能会使用它,因为它看起来"更容易",即使他们只关心前几项。如果你知道你在做什么,这可能看起来过于严格("好吧,这个repo保证永远不会有超过5个问题"),但通常最好假设每个用户都有潜在的恶意。

最新更新