Uso avançado do Microsoft Graph

Implementar segurança do Azure para desenvolvedores

Anushika Agarwal

Cloud Data Engineer

Analogia: idas ao mercado

  • Levar as compras em viagens menores

  • Mais leve, rápido e seguro

Viagens ao mercado

Implementar segurança do Azure para desenvolvedores

Paginação

  • Divide resultados grandes em páginas menores
  • Respostas mais rápidas e menos timeouts
  • Como buscar as próximas páginas?

Paginação

Implementar segurança do Azure para desenvolvedores

Exemplo: PeopleSphere usando paginação

  • Milhares de registros de funcionários em páginas fáceis de gerenciar

Exemplo - Paginação no PeopleSphere

Implementar segurança do Azure para desenvolvedores

Paginação no servidor

  • O serviço define um tamanho de página padrão
  • O cliente não especifica o tamanho
  • Exemplo
    • GET /v1.0/users : (padrão) Retorna 100 itens por página

Paginação no servidor

Implementar segurança do Azure para desenvolvedores

Paginação no cliente

  • O cliente define quantos itens retornar por página

Paginação no cliente

Implementar segurança do Azure para desenvolvedores

Parâmetros de consulta para paginação

  • Parâmetros de consulta

    • $top: número de itens por página.

    Parâmetros de consulta - Top

  • $skip: deslocamento; começa após os primeiros N itens

    Parâmetros de consulta - Skip

Implementar segurança do Azure para desenvolvedores

Exemplo de paginação no cliente

  • Exemplo:
    • https://graph.microsoft.com/v1.0/groups?$top=2

Paginação no cliente

Implementar segurança do Azure para desenvolvedores

Analogia de batching: carrinho online

  • Vários itens em um carrinho
  • Um pagamento, um recibo

Analogia - Carrinho de compras online

Implementar segurança do Azure para desenvolvedores

Batching

  • Combine várias requisições do Graph em uma chamada HTTP
  • Um payload -> uma resposta com todos os resultados

  • Benefícios

    • Menos idas e vindas, menor latência
    • Ideal para dashboards.
  • Limite

    • Até 20 requisições por lote

Batching

Implementar segurança do Azure para desenvolvedores

Endpoint de requisição em lote

  • Endpoint

    • Método: POST
    • Endpoint:https://graph.microsoft.com/v1.0/$batch
  • $batch em vez de um recurso específico como users

Endpoint de requisição em lote

Implementar segurança do Azure para desenvolvedores

Corpo da requisição em lote

  • O corpo é um objeto JSON
  • Contém uma propriedade: requests
  • requests é um array (até 20 itens)
{ "requests": 
   [ {
      "id": "1",
      "method": "GET",
      "url": "/me/memberOf"
    },
    {
      "id": "2",
      "method": "GET",
      "url": "/me/planner/tasks"
    } ]
}
Implementar segurança do Azure para desenvolvedores

Itens e cabeçalhos da requisição

  • Cada item de requisição precisa de

    • id: rótulo único para casar com a resposta
    • method: (GET/POST/PATCH/DELETE)
    • url: caminho relativo
  • Cabeçalhos: Content-Type: application/json

{ "requests": 
   [ {
      "id": "1",
      "method": "GET",
      "url": "/me/memberOf"
    },
    {
      "id": "2",
      "method": "GET",
      "url": "/me/planner/tasks"
    } ]
}
Implementar segurança do Azure para desenvolvedores

Resposta do lote

  • Cada entrada representa uma requisição
{
  "responses": [
    {  "id": "1", 
        "status": 200, 
        "body": { "value": [/* ... */]}},
    { 
        "id": "2", 
        "status": 403, 
        "body": { "error": [/* ... */]}}
  ]
}

Implementar segurança do Azure para desenvolvedores

O que cada resposta inclui

  • Cada item de resposta inclui

    • id: corresponde à requisição original

    • status: status HTTP para aquele item

      • 200: OK
      • 403: Proibido
    • headers: (ex.: Content-Type)

    • body: dados ou objeto de erro

{
  "responses": [
    {  "id": "1", 
        "status": 200, 
        "body": { "value": [/* ... */]}},
    { 
        "id": "2", 
        "status": 403, 
        "body": { "error": [/* ... */]}}
  ]
}

Implementar segurança do Azure para desenvolvedores

Vamos praticar!

Implementar segurança do Azure para desenvolvedores

Preparing Video For Download...