使用 REST API 进行批处理请求

本文介绍如何对 Microsoft Office SharePoint Online(和本地 SharePoint 2016 及更高版本)的 REST/OData API 和 Office 365 REST API 的文件和文件夹子集执行批处理查询和操作。 借助此技术,可通过将多个操作合并到对服务器的单个请求和单个响应,提高加载项的性能。

$batch 选项的执行摘要

SharePoint Online (和本地 SharePoint 2016 及更高版本) 和Office 365 API 实现 OData $batch 查询选项,因此您可以依赖官方文档来详细了解如何使用它。 (也可查看 Andrew Connell 关于该主题的博客文章,开始部分是第 1 部分 - SharePoint REST API 批处理。)

以下是有关要点提示:

  • 请求 URL 包含根服务 URL 和 $batch 选项;例如,https://fabrikam.sharepoint.com/_api/$batchhttps://fabrikam.office365.com/api/v1.0/me/$batch
  • HTTP 请求正文属于 MIME 类型:多部分/混合
  • 请求的正文分成几个部分,各个部分之间用请求标头中指定的边界字符串分开。
  • 正文的每部分都有自己的 HTTP 谓词和 REST URL,以及自己的内部正文(若适用)。
  • 一个部分可为一个读取操作(或函数调用),也可以为一个或多个写入操作(或函数调用)的 ChangeSet。 ChangeSet 本身为 MIME 类型 multipart/mixed,其各个部分包含插入、更新或删除操作。

重要

SharePoint 和 Office 365 API 无法交互,也不支持包含多个操作的变更集的“全有或全无”功能。 如果任何子操作失败,其他操作仍将完成且不会回退。

代码示例

针对 SharePoint REST/OData API 使用 $batch 查询选项的代码示例:

示例请求和响应

下面是一个原始 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 和 SharePoint 列表的列表的 GET 进行批处理。

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--

谨慎

批处理请求可以减少对 SharePoint REST API 的往返请求数。 但不支持在单个批次中上传多个文件。

OData 库

OData 库支持多种语言的 OData 批处理。 以下是两个示例。 有关更加完整的列表,请参阅 OData 库

另请参阅