Com a nova abordagem de desenvolvimento para SharePoint estamos cada vez mais utilizando javascript e RestApi para desenvolvimento. Isso é algo muito positivo, já que estamos evitando código do lado do servidor. Esta nova forma de desenvolvimento para SharePoint pode acarretar em uma grande quantidade de requisições http para o SharePoint deixando o carregamento da página mais lenta e a experiência do usuário ruim.

Uma das formas de contornar o problema de muitos requests ao SharePoint é utilizar de consultas em lote(batch) da API Rest disponível para o SharePoint OnLine. Esta api pode ser invocada através do seguinte endpoint:

https://[seu_site]/_api/$batch

Este endpoint apenas aceita requisições do tipo POST. O corpo da requisição deve conter todas as consultas Rest que deseja realizar. Formato da requisição:

Header:

  • X-RequestDigest: Obtido através do hiden field “__REQUESTDIGEST”;
  • Content-Type: Deve possuir o seguinte valor: multipart/mixed; boundary=GUID. Onde o Guid é um valor que deverá ser gerado para identificação da requisição.

Body:

O Corpo da requisição, conforme informado anteriormente, deve possuir as consultas que deseja realizar.  Estrutura do corpo:

  • Batch id: Id da requisição em lote. O mesmo utilizado no cabeçalho da requisição.
  • Content-Type: Deve possuir o valor: application/http;
  • Content-Transfer-Encoding: Deve possuir o valor: binary
  • EndPoint: Url da API Rest para consulta. Exemplo: https://[seu_site]/_api/Web/Lists?$select=Title.

Exemplo de corpo da requisição:

  • Linha 1: ID do lote. Observe que ele começa com “–batch_[GUID]“;
  • Linha 5 e 12: Consultas que quero realizar;
  • Linha 15: Indica o fim do lote. Observe que termina com “–batch_[GUID]–;

Para executar esta prova de conceito criei um pequeno código usando o Visual Code, Node Js e TypeScript. Neste código basicamente instancio a uma classe, adiciono as Urls que quero fazer consultar e envio a requisiçao via POST. Para cada URL existe uma função de callback para manipular os resultados.

Exemplo de código:

Adicionei o script em uma página, inseri um botão e, ao clicar no botão, em uma única requisição eu busco: O nome das listas do site e todas as propriedades do SPWeb:

Tela:

Exemplo de requisição utilizando consulta batch

Requisição:

Observe que informei 2 consultas e foi feita apenas uma requisição.

Header enviado:

Resultado:

O Código fonte utilizado pode ser obtido no github: https://github.com/pedromneto/sharepointbash

Bom neste exemplo apenas mostrei como  fazer requisições do tipo GET para listar conteúdo. Na parte 2 mostrarei como fazer requisições do tipo POST, criando conteúdo dentro do SharePoint.

Por hoje é só. Em caso de dúvidas ou sugestões me mandem e-mail (pedro.neto@outlook.com) ou chamem no twitter: @pedmneto. Abraços a todos!

Referência: