13

原谅我,我对使用 REST 很陌生。

目前我正在使用 SP2013 Odata(_api/web/lists/getbytitle('<list_name>')/items?)来获取列表的内容。该列表中有 199 个项目,所以我需要调用它两次,每次都要求一组不同的项目。我想我可以通过调用来做到这一点:

_api/web/lists/getbytitle('<list_name>')/items?$skip=100&$top=100

每次改变多少我都需要跳过。问题是这只返回前 100 个项目。是我做错了什么还是$skipOData 服务坏了?

假设这种方式不起作用或不实用,是否有更好的方法来遍历 REST 调用?

我正在使用AcceptHeader 等于的 JSON 协议application/json;odata=verbose

我想这$top=100不是真的必要

编辑:我查了更多,我不完全确定这里的术语,但$skip如果您使用 SharePoint 2010 引入的方法,使用效果很好,即,_vti_bin/ListData.svc/<list_name>?$skip=100

实际上,很有趣的是,旧方式并没有对退货设置 100 件商品的限制。所以跳过甚至没有必要。但是,如果您只想返回某个数据段,则必须执行以下操作:

_vti_bin/ListData.svc/<list_name>?$skip=x&$top=(x+y)

每次通过循环你都会有类似的东西x+=y

您可以使用我上面描述的旧方法,也可以在下面查看我的答案,了解如何使用 SP2013 OData 执行此操作

4

2 回答 2

13

好吧,我已经想通了。$skip不是要在该items?级别使用的命令。它仅在lists?级​​别上起作用。但是,有一种方法可以做到这一点,实际上比我想做的要容易得多。

如果您只想要所有数据

在返回的数据中,假设您调用的列表包含 100 多个项目,则会有一个__nextat d/__next(假设您使用的是 json)。这__next(这是一个双下划线,请记住这一点。起初我遇到了一些问题,因为我试图获取d/_next它从未返回任何内容)是获取下一组项目的正确 URL。__next只有当有另一组物品可供获取时,它才会是一个值。

我最终创建了一个RequestURL变量,该变量最初设置为原始请求,但d/__next在循环结束时更改为。然后循环RequestURL在进入循环之前检查是否不为空。

请原谅我缺少代码,我正在使用 SharePoint Designer 2013 来完成此操作,并且语法描述性并不好。

如果您只想要一小部分数据

x可能在某些情况下,您每次通过循环时只需要列表中的行数,这也很容易做到。

如果您只是$top=x在请求中添加一个参数,__next则响应返回的 URL 将为x您提供列表中的下一行。最终,当没有剩余的行要返回__next时,将不会与响应一起返回。

于 2013-09-23T19:12:14.480 回答
1

不要忘记,为了使用 __next 你需要有一个

$skiptoken=Paged=TRUE 

在网址中也是如此。

于 2015-03-05T23:31:55.343 回答