Microsoft Graph 進階用法

為開發人員實作 Azure 安全性

Anushika Agarwal

Cloud Data Engineer

類比:買菜分趟走

  • 多趟小搬運提菜

  • 更輕、更快、更安全

Grocery trips

為開發人員實作 Azure 安全性

分頁(Pagination)

  • 大量結果切成小頁面
  • 回應更快、較少逾時

分頁

為開發人員實作 Azure 安全性

範例:PeopleSphere 使用分頁

  • 上千筆員工紀錄以可管理的頁面抓取

範例 - PeopleSphere 分頁

為開發人員實作 Azure 安全性

伺服器端分頁

  • 服務選定預設頁面大小
  • 用戶端不指定大小
  • 範例
    • GET /v1.0/users :(default) 每頁回傳 100 筆

伺服器端分頁

為開發人員實作 Azure 安全性

用戶端分頁

  • 用戶端指定每頁要回傳的項目數

用戶端分頁

為開發人員實作 Azure 安全性

分頁的查詢參數

  • 查詢參數

    • $top:每頁項目數。

    查詢參數 - Top

  • $skip:位移量;從前 N 個之後開始

    查詢參數 - Skip

為開發人員實作 Azure 安全性

用戶端分頁範例

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

用戶端分頁

為開發人員實作 Azure 安全性

批次處理類比:線上購物車

  • 多個項目放在同一購物車
  • 一次結帳,一張收據

類比 - 線上購物車

為開發人員實作 Azure 安全性

批次處理(Batching)

  • 將多個 Graph 請求合併成一次 HTTP 呼叫
  • 單一 payload -> 單一回應,含全部結果

  • 優點

    • 次數更少,延遲更低
    • 很適合儀表板。
  • 限制

    • 每批次最多 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 安全性

一起來練習吧!

為開發人員實作 Azure 安全性

Preparing Video For Download...