Olá tudo bom com vocês?
Quantas vezes nós estamos fazendo algum desenvolvimento e precisamos consultar diversas fontes de conteúdo para gerar algum resultado? Estes dados podem inclusive ter alguma dependência. E assim como fazemos? Primeiro uma requisição para obter um tipo de dado, e depois outra requisição, e outra…e outra……..E assim demoramos a obter o resultado. Caso estes dados estejam disponíveis no Office 365, podemos usar o Microsoft Graph para fazer várias consultas em apenas uma requisição.
OBS.: Já escrevi sobre requisições em lote no SharePoint OnLine. Para ler o texto basta acessar o post: https://pmneto.com/requisicoes-em-lote-batch-no-sharepoint-online-parte-1/
Mãos a obra!
Para fazer a demostração estou utilizando o Graph Explorer. Ele é uma plataforma da Microsoft onde é possível brincar um pouco com os recursos do Graph. Inclusive é possível logar com a sua conta Microsoft e fazer consultas às suas informações.
Para fazer a consultas em lote utilizando o Graph precisamos usar o endpoint https://graph.microsoft.com/v1.0/$batch. Este endpoint aceita apenas requisições do tipo POST. Outro ponto interessante é que precisamos informar quais são as consultas/ações que devem ser feitas nesta requisição. Para isso é necessário informar um JSON com a seguinte estrutura:
{
requests: [
{
id: "1",
method: "GET",
url: "/me/calendars"
},
{
id: "2",
method: "GET",
url: "/me/messages"
}
]
}
Explicando o JSON:
- Linha 2: Criamos um array com o nome de requests.
- Linha 3: Criamos o objeto que irá conter a requisição.
- Linha 4: Informamos qual o ID da ação a ser executada;
- Linha 5: Qual verbo deve ser utilizado.
- Linha 6: Qual a url que deverá ser executada.
Neste exemplo estamos consultando meus calendários e minhas mensagens de e-mail.
Testando:
Acesse o Graph Explorer no link https://developer.microsoft.com/en-us/graph/graph-explorer.

Na barra de endereço existente altere a requisição para POST e informe a url https://graph.microsoft.com/v1.0/$batch.

Em Request Body informe o JSON utilizado acima:
{
requests: [
{
id: "1",
method: "GET",
url: "/me/calendars"
},
{
id: "2",
method: "GET",
url: "/me/messages"
}
]
}

Agora basta clicar em Run Query e ver o resultado:

O resultado será um JSON com o identificador de cada uma das requisições e o resultado da requisição:
{
"responses": [
{
"id": "1",
"status": 200,
"headers":{},
"body":{}
},
{
"id": "2",
"status": 200,
"headers":{},
"body":{}
}
]
}
Detalhes da resposta:
- Linha 2: Array responses, que possui o resultado das nossas requisições.
- Linha 3: O Objeto correspondente a requisição.
- Linha 4: o Identificador da requisição. É o mesmo identificador utilizado para fazer a requisição.
- Linha 5: Código de status da requisição.
- Linha 6: O header recebido da requisição.
- Linha 7: O resultado da requsição. Nesta propriedade que estará o resultado da requisição feita. No nosso exemplo estará a lista dos meus calendários:

Interessante não? O legal que podemos usar isso, por exemplo, no SharePoint Framework. Abaixo um código que fiz para brincar um pouco com estes requests:
protected getWorkSheetInformation(): Promise<IWorksheet> {
return new Promise<IWorksheet>((resolve, reject) => {
let requests = {
requests: [
{
id: "1",
method: "GET",
url:
"/sites/oie.sharepoint.com/drives/b!IAPGWg-JeU-nINjIf/items/01GGCDGZAMG6YSR/workbook/worksheets('Compras')/tables('1')/rows"
},
{
id: "2",
method: "GET",
url:
"/sites/oie.sharepoint.com/drives/b!IA-JeU-nINjI/items/01GGCDGZAMG6YSR/workbook/worksheets('Compras')/tables('1')/columns"
}
]
};
this.clientContext.msGraphClientFactory
.getClient()
.then((msClient: MSGraphClient) => {
msClient.api('/$batch')
.version("v1.0")
.post(requests,((batchError,batchResults)=>{
if(batchError !== null){
console.warn(batchError);
return;
}
let rows=batchResults.responses[0].body.value;
let columns = batchResults.responses[1].body.value;
resolve({
Columns:columns,
Rows:rows
});
}));
});
});
}
Bom pessoal por hoje é só! Qualquer dúvida podem me procurar que, assim que possível, tentarei responder.
Referências:
- Microsoft Graph: https://developer.microsoft.com/en-us/graph/get-started;
- Combine multiple requests in one HTTP call using JSON batching: https://docs.microsoft.com/en-us/graph/json-batching;