Использование $skip с API REST SharePoint 2013

Простите меня, я очень новичок в использовании 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

Вы можете использовать старый метод, описанный выше, или проверить мой ответ ниже для объяснения того, как это сделать, используя OData SP2013

Ответ 1

Хорошо, я понял это. $skip не является командой, которая предназначена для использования на уровне items?. Он работает только на уровне lists?. Но, есть способ сделать это, на самом деле намного проще, чем то, что я хотел сделать.

Если вы просто хотите, чтобы все данные

В возвращаемых данных, предполагая, что список, который вы вызываете, содержит более 100 элементов, будет __next at d/__next (при условии, что вы используете json). Это __next (это двойная underscorce, помните об этом. Сначала у меня было несколько проблем, потому что я пытался получить d/_next, который никогда ничего не возвращал) является правильным URL для получения следующего набора элементов. __next будет только когда-либо быть значением, если есть другой набор доступных для доступа элементов.

В итоге я создал переменную RequestURL, которая была первоначально настроена на исходный запрос, но была изменена на d/__next в конце цикла. Затем цикл пошел и проверен, если RequestURL не был пустым, прежде чем идти внутрь цикла.

Простите мой недостаток кода, я использую SharePoint Designer 2013, чтобы сделать это, и синтаксис не является ужасно описательным.

Если вам нужен только небольшой набор данных

Вероятно, существует несколько ситуаций, когда вам нужно будет только x количества строк из вашего списка каждый раз, когда вы проходите цикл, и это действительно легко сделать.

если вы просто добавите параметр $top=x к вашему запросу, URL __next, который возвращается с ответом, предоставит вам следующие строки x из вашего списка. В конце концов, когда строки, оставшиеся для возврата __next, не будут возвращены с ответом.

Ответ 2

Не забывайте, что для использования __next вам нужно иметь

$skiptoken=Paged=TRUE 

в URL-адресе.