原谅我,我对使用REST非常新。
目前我正在使用SP2013 Odata (_api/web/lists/getbytitle('<list_name>')/items?) 获取列表的内容。该列表中有199个项目,所以我需要调用它两次,每次都要求一组不同的项目。我想我可以通过调用来做到这一点:
_api/web/lists/getbytitle('<list_name>')/items?$skip=100&$top=100
每次改变,但我需要跳过很多。问题是这只会返回前100个项目。有什么我做错了或是 $skip 在OData服务中打破了吗?
有没有更好的方法来迭代REST调用,假设这种方式不起作用或不实用?
我正在使用JSon协议 Accept 标题等于 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执行此操作
好吧,我已经弄清楚了。 $skip 不是一个意图用于的命令 items? 水平。它只适用于 lists? 水平。但是,有一种方法可以做到这一点,实际上比我想做的容易得多。
如果您只想要所有数据
在返回的数据中,假设您正在调用的列表包含超过100个项目,则会有一个 __next 在 d/__next (假设你使用的是json)。这个 __next (这是一个双重的不足,记住这一点。我起初有一些问题,因为我试图得到 d/_next 它从未返回任何内容)是获取下一组项目的正确URL。 __next 如果有另一组可用的项目,它将只是一个值。
我最终创造了一个 RequestURL 最初设置为原始请求的变量,但更改为 d/__next 在循环结束时。然后循环去检查是否 RequestURL 在进入循环之前不是空的。
原谅我缺少代码,我正在使用SharePoint Designer 2013来实现这一点,并且语法不是非常具有描述性。
如果你只喜欢一小组数据
可能有一些你只想要的情况 x 每次进行循环时列表中的行数量也很容易实现。
如果你只是添加一个 $top=x 你的请求的参数, __next 随响应返回的URL将为您提供下一个 x 列表中的行。最终没有剩下的行返回 __next 不会随着回复而退回。
好吧,我已经弄清楚了。 $skip 不是一个意图用于的命令 items? 水平。它只适用于 lists? 水平。但是,有一种方法可以做到这一点,实际上比我想做的容易得多。
如果您只想要所有数据
在返回的数据中,假设您正在调用的列表包含超过100个项目,则会有一个 __next 在 d/__next (假设你使用的是json)。这个 __next (这是一个双重的不足,记住这一点。我起初有一些问题,因为我试图得到 d/_next 它从未返回任何内容)是获取下一组项目的正确URL。 __next 如果有另一组可用的项目,它将只是一个值。
我最终创造了一个 RequestURL 最初设置为原始请求的变量,但更改为 d/__next 在循环结束时。然后循环去检查是否 RequestURL 在进入循环之前不是空的。
原谅我缺少代码,我正在使用SharePoint Designer 2013来实现这一点,并且语法不是非常具有描述性。
如果你只喜欢一小组数据
可能有一些你只想要的情况 x 每次进行循环时列表中的行数量也很容易实现。
如果你只是添加一个 $top=x 你的请求的参数, __next 随响应返回的URL将为您提供下一个 x 列表中的行。最终没有剩下的行返回 __next 不会随着回复而退回。