Просмотр документации по API Sharepoint (находится здесь: http://msdn.microsoft.com/en-us/library/office/dn605900 (v = office.15) .aspx) Я пытаюсь понять, как выбирать фрагменты документов. Я ожидал, что $ skip сработает, поскольку подразумевается, что должна присутствовать большая часть функций OData, но это не работает. Я также не могу понять, является ли $ skiptoken допустимым параметром запроса. Он указан в документации внизу (без дополнительных объяснений), но я пока не могу добиться от него правильного результата.
Если кто-то знает о $ skip или $ skiptoken или другом доступном методе для получения обратно фрагментированных ответов, помощь в решении этой проблемы будет огромной!
РЕДАКТИРОВАТЬ: чтобы уточнить, такие вещи, как API_URL / files? $ Orderby = url & $ top = 5, работают, но такие вещи, как API_URL / files? $ Orderby = url & $ skip = 50 - нет. Однако я только что нашел в ответе «следующий» URL-адрес, который, по-видимому, обеспечивает поддержку разбиения на страницы на стороне сервера. Я попытаюсь понять, как использовать $ skiptoken отсюда.
2 ответа
Указан протокол OData V4 (ссылка на 11.2.5.7 разбиение на страницы, управляемое сервером), что:
Службы OData могут использовать зарезервированный системный параметр запроса $ skiptoken при создании следующих ссылок. Его содержание непрозрачно, зависит от службы и должно соответствовать правилам только для частей запроса URL. Клиенты OData НЕ ДОЛЖНЫ использовать параметр системного запроса $ skiptoken при создании запросов.
Таким образом, реализация O365 SharePoint API, в которой он публикует $ skiptoken в качестве параметра запроса, который клиент должен использовать для исключения первых нескольких элементов из запрашиваемой коллекции, является нарушением протокола. Для такого сценария клиент должен использовать $ skip. Но из прилагаемой спецификации O365 кажется, что $ skip не реализован.
Если вы запрашиваете набор сущностей службы O365, а полезная нагрузка ответа содержит следующую ссылку (аннотацию @odata.nextLink
в объекте JSON ответа), это указывает на то, что служба имеет подкачку на стороне сервера для набора сущностей. Обычно следующая ссылка представляет собой URL-адрес, содержащий параметр запроса $ skiptoken, например http://host/service/entityset?$skiptoken=n
, который клиент может использовать для получения следующей страницы.
В настоящее время параметр запроса $skip
не поддерживается в интерфейсе REST SharePoint 2013 / Online. Но вы можете использовать REST-интерфейс SharePoint 2010 для получения результатов с разбивкой на страницы с помощью параметра запроса $skip
, например:
https://contoso.sharepoint.com/_vti_bin/ListData.svc/Pages?$skip=2&$top=2
Как использовать параметр запроса $skiptoken
в интерфейсе REST SharePoint 2013 / Online
Формат: $skiptoken=Paged=TRUE&p_ID=<last item id to skip>&$top=<items count>
Пример
В примере показано, как получить ограниченное количество элементов (2 элемента, идентификаторы которых равны или больше 2
) из библиотеки Pages
:
function getPagedItems(webUrl,listTitle,startItemId,itemsCount)
{
var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items?$skiptoken=" + encodeURIComponent('Paged=TRUE&p_SortBehavior=0&p_ID=' + (startItemId-1) + '&$top=' + itemsCount);
return executeRequest(endpointUrl,'GET');
}
getPagedItems('https://contoso.sharepoint.com/','Pages',2,2)
.done(function(data){
if(data.d.results.length == 0){
console.log('Items not found');
return;
}
for(var i = 0; i < data.d.results.length; i++){
var item = data.d.results[i];
console.log(item.Title);
}
});
Где
function executeRequest(url,method,headers,payload)
{
if (typeof headers == 'undefined'){
headers = {};
}
headers["Accept"] = "application/json;odata=verbose";
if(method == "POST") {
headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
}
var ajaxOptions =
{
url: url,
type: method,
contentType: "application/json;odata=verbose",
headers: headers
};
if(method == "POST") {
ajaxOptions.data = JSON.stringify(payload);
}
return $.ajax(ajaxOptions);
}
Похожие вопросы
Новые вопросы
odata
Протокол открытых данных (OData) - это стандартизированный протокол для создания REST API. OData определяет множество передовых методов работы с REST API, включая краткий, ориентированный на гипермедиа формат JSON. Используйте этот тег для всех версий спецификации (v2, v3, v4.x).