Отправка пакетных запросов с использованием 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:

Примеры запросов и откликов

Ниже приведен пример необработанного 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.

См. также