Fazer solicitações em lote com as APIs REST
Este arquivo descreve como você pode fazer consultas e operações em lote na API REST/OData API do Microsoft SharePoint Online (e SharePoint 2016 e posterior no local) e no Subconjunto de arquivos e pastas da API REST do Office 365. Com essa técnica, você pode melhorar o desempenho de seu suplemento combinando várias opções em uma única solicitação para o servidor e uma única resposta.
O SharePoint Online (e o SharePoint 2016 local e posterior) e as APIs Office 365 implementam a opção de consulta OData$batch
, para que você possa confiar na documentação oficial para obter detalhes sobre como usá-la. (Outra opção é consultar as postagens no blog de Andrew Connell sobre o assunto, começando em Parte 1 – Lote da API REST do SharePoint).
Confira a seguir um lembrete dos pontos principais:
- A URL da solicitação consiste em URL de serviço raiz e a opção
$batch
, por exemplohttps://fabrikam.sharepoint.com/_api/$batch
ouhttps://fabrikam.office365.com/api/v1.0/me/$batch
. - O corpo da solicitação HTTP é do tipo MIME multipart/mixed.
- O corpo da solicitação é dividido em partes separadas umas das outras por uma cadeia de caracteres limite que é especificada no cabeçalho da solicitação.
- Cada parte do corpo tem seu próprio verbo HTTP e URL REST e seu próprio corpo interno quando aplicável.
- Uma parte pode ser uma operação de leitura (ou chamada de função) ou um ChangeSet de uma ou mais operações de gravação (ou chamadas de função). Um ChangeSet é um tipo MIME multipart/misturado com subpartas que contêm operações de inserção, atualização ou exclusão.
Importante
As APIs do SharePoint e do Office 365 não são transacionais e não dão suporte a funcionalidades "tudo ou nada" para ChangeSets que têm mais de uma operação nelas. Se qualquer uma das operações secundárias falhar, as outras ainda serão concluídas e não serão revertidas.
Exemplos de código que usam a opção de consulta $batch
em APIs REST/OData do SharePoint:
- C#:OfficeDev/Core.ODataBatch
- JavaScript:andrewconnell/sp-o365-rest
A seguir está um exemplo de uma solicitação HTTP bruta que faz duas operações GET em lote que recupera os títulos de todos os itens em duas listas diferentes.
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--
A seguir está um exemplo do corpo de uma solicitação HTTP bruta que faz operações DELETE de uma lista e GET da lista das listas do 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--
Atenção
As solicitações em lote podem reduzir o número de solicitações de ida e volta para a API REST do SharePoint. No entanto, o carregamento de vários arquivos em um único lote não é suportado.
As bibliotecas OData dão suporte a lotes de OData para vários idiomas. Confira dois exemplos a seguir. Para obter uma lista mais completa, confira Bibliotecas OData.