Microsoft Graph 的高级用法

面向开发者的 Azure 安全实现

Anushika Agarwal

Cloud Data Engineer

类比:分次搬运杂货

  • 大量杂货分多次搬运

  • 更轻松、更快、更安全

搬运杂货

面向开发者的 Azure 安全实现

分页

  • 大量结果拆分为更小的页面
  • 响应更快,超时更少

分页

面向开发者的 Azure 安全实现

示例:PeopleSphere 使用分页

  • 成千上万的员工记录以可管理的分页方式检索

示例 - PeopleSphere 分页

面向开发者的 Azure 安全实现

服务端分页

  • 服务选择默认页大小
  • 客户端不指定大小
  • 示例
    • GET /v1.0/users:(_默认_) 每页返回100 项

服务端分页

面向开发者的 Azure 安全实现

客户端分页

  • 客户端指定每页返回的项目数

客户端分页

面向开发者的 Azure 安全实现

分页的查询参数

  • 查询参数

    • $top: 每页项目数。

    查询参数 - Top

  • $skip: 偏移量;跳过前 N 个项目

    查询参数 - Skip

面向开发者的 Azure 安全实现

客户端分页示例

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

客户端分页

面向开发者的 Azure 安全实现

批处理类比:在线购物车

  • 多个商品放入一个购物车
  • 一次结账,一张收据

类比 - 在线购物车

面向开发者的 Azure 安全实现

批处理(Batching)

  • 将多个 Graph 请求合并为一次 HTTP 调用
  • 一个负载 -> 一个响应,含全部结果

  • 优势

    • 更少往返,更低延迟
    • 适合仪表盘
  • 限制

    • 每批最多 20 个请求

批处理

面向开发者的 Azure 安全实现

批处理请求端点

  • 端点

    • 方法:POST
    • 端点https://graph.microsoft.com/v1.0/$batch
  • 使用 $batch,而非 users 等具体资源

批处理请求端点

面向开发者的 Azure 安全实现

批处理请求 Body

  • BodyJSON 对象
  • 仅含一个属性:requests
  • requests数组(最多20 项
{ "requests": 
   [ {
      "id": "1",
      "method": "GET",
      "url": "/me/memberOf"
    },
    {
      "id": "2",
      "method": "GET",
      "url": "/me/planner/tasks"
    } ]
}
面向开发者的 Azure 安全实现

请求项与请求头

  • 每个请求项需包含

    • id:用于匹配响应的唯一标签
    • method:GET/POST/PATCH/DELETE
    • url:相对路径
  • 请求头Content-Type: application/json

{ "requests": 
   [ {
      "id": "1",
      "method": "GET",
      "url": "/me/memberOf"
    },
    {
      "id": "2",
      "method": "GET",
      "url": "/me/planner/tasks"
    } ]
}
面向开发者的 Azure 安全实现

批处理响应

  • 每个条目代表一个请求
{
  "responses": [
    {  "id": "1", 
        "status": 200, 
        "body": { "value": [/* ... */]}},
    { 
        "id": "2", 
        "status": 403, 
        "body": { "error": [/* ... */]}}
  ]
}

面向开发者的 Azure 安全实现

每个响应包含的内容

  • 每个响应项包含

    • id:与原请求匹配

    • status:该项的 HTTP 状态

      • 200:OK
      • 403:Forbidden
    • headers:(如 Content-Type

    • body:数据或错误对象

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

面向开发者的 Azure 安全实现

Passons à la pratique !

面向开发者的 Azure 安全实现

Preparing Video For Download...