Отправка пакетных запросов с использованием REST API
В этой статье описано выполнение пакетных запросов и операций при использовании REST API или OData API для Microsoft SharePoint Online (и локальной среды SharePoint 2016 и более поздних версий), а также при использовании подмножества файлов и папок REST API для Office 365. С помощью этой методики вы можете повысить производительность надстройки, совместив множество операций в одном запросе к серверу и одном отклике.
Краткий обзор параметра $batch
SharePoint Online (и локальный SharePoint 2016 и более поздних версий) и API-интерфейсы Office 365 реализуют параметр запроса OData$batch
, поэтому вы можете воспользоваться официальной документацией для получения сведений о том, как его использовать. Кроме того, вы можете ознакомиться с этой темой в блоге Andrew Connell. Начните с записи Часть 1. Пакетные запросы REST API в SharePoint.
Напомним о некоторых важных факторах:
- URL-адрес запроса состоит из корневого URL-адреса службы и параметра
$batch
. Пример:https://fabrikam.sharepoint.com/_api/$batch
илиhttps://fabrikam.office365.com/api/v1.0/me/$batch
. - Тело HTTP-запроса относится к типу MIME multipart/mixed.
- Текст запроса делится на части, отделенные друг от друга граничной строкой, которая указывается в заголовке запроса.
- У каждой части этого тела запроса есть команда HTTP и URL-адрес REST, а также внутреннее тело, если это применимо.
- Часть может быть операцией чтения (или вызовом функции) или набором изменений из одной или нескольких операций (или функций вызова). Набор изменений сам является MIME-типом multipart/mixed с подразделами, которые содержат операции вставки, обновления или удаления.
Важно!
Интерфейсы API для SharePoint и Office 365 не являются транзакционными и не поддерживают функции "все или ничего" объектов ChangeSet, содержащих несколько операций. В случае сбоя какой-либо из дочерних операций остальные операции выполняются без отката.
Примеры кода
Примеры кода, в котором используется параметр запроса $batch
для интерфейсов REST API или OData API SharePoint:
- C#:OfficeDev/Core.ODataBatch
- JavaScript:andrewconnell/sp-o365-rest
Примеры запросов и откликов
Ниже приведен пример необработанного HTTP-запроса, который пакетно обрабатывает две операции GET, которые извлекают названия всех элементов в двух разных списках.
POST https://fabrikam.sharepoint.com/_api/$batch HTTP/1.1
Authorization: Bearer <access token omitted>
Content-Type: multipart/mixed; boundary=batch_e3b6819b-13c3-43bb-85b2-24b14122fed1
Host: fabrikam.sharepoint.com
Content-Length: 527
Expect: 100-continue
--batch_e3b6819b-13c3-43bb-85b2-24b14122fed1
Content-Type: application/http
Content-Transfer-Encoding: binary
GET https://fabrikam.sharepoint.com/_api/Web/lists/getbytitle('Composed%20Looks')/items?$select=Title HTTP/1.1
--batch_e3b6819b-13c3-43bb-85b2-24b14122fed1
Content-Type: application/http
Content-Transfer-Encoding: binary
GET https://fabrikam.sharepoint.com/_api/Web/lists/getbytitle('User%20Information%20List')/items?$select=Title HTTP/1.1
--batch_e3b6819b-13c3-43bb-85b2-24b14122fed1--
Ниже приведен пример текста необработанного HTTP-запроса, который пакетно обрабатывает операцию DELETE для списка и операцию GET для списка списков SharePoint.
POST https://fabrikam.sharepoint.com/_api/$batch HTTP/1.1
Authorization: Bearer <access token omitted>
Content-Type: multipart/mixed; boundary=batch_7ba8d60b-efce-4a2f-b719-60c27cc0e70e
Host: fabrikam.sharepoint.com
Content-Length: 647
Expect: 100-continue
--batch_7ba8d60b-efce-4a2f-b719-60c27cc0e70e
Content-Type: multipart/mixed; boundary=changeset_efb6b37c-a5cd-45cb-8f5f-4d648006e65d
--changeset_efb6b37c-a5cd-45cb-8f5f-4d648006e65d
Content-Type: application/http
Content-Transfer-Encoding: binary
DELETE https://fabrikam.sharepoint.com/_api/Web/lists/getbytitle('OldList') HTTP/1.1
If-Match: "1"
--changeset_efb6b37c-a5cd-45cb-8f5f-4d648006e65d--
--batch_7ba8d60b-efce-4a2f-b719-60c27cc0e70e
Content-Type: application/http
Content-Transfer-Encoding: binary
GET https://fabrikam.sharepoint.com/_api/Web/lists HTTP/1.1
--batch_7ba8d60b-efce-4a2f-b719-60c27cc0e70e--
Осторожностью
Пакетные запросы могут уменьшить количество запросов кругового пути к REST API SharePoint. Однако отправка нескольких файлов в одном пакете не поддерживается.
Библиотеки OData
Библиотеки OData, поддерживающие пакетные запросы OData для множества языков. Ниже приведены два примера. Более полный список см. на странице Библиотеки OData.