Microsoft Graph の高度な使い方

開発者のための Azure セキュリティ実装

Anushika Agarwal

Cloud Data Engineer

例え話:買い物の荷物運び

  • 買い物は小分けにして運ぶ

  • 軽く、速く、安全に

買い物の運び方

開発者のための Azure セキュリティ実装

ページネーション

  • 大量の結果を小さなページに分割
  • 応答が速くなり、タイムアウトも減少
  • 次のページはどう取得する?

ページネーション

開発者のための Azure セキュリティ実装

例:PeopleSphere でのページネーション利用

  • 数千件の従業員レコードを、扱いやすいページ単位で取得

例:PeopleSphere のページネーション

開発者のための Azure セキュリティ実装

サーバー側ページネーション

  • サービスがデフォルトのページサイズを選択
  • クライアントはサイズを指定しない
  • 例
    • GET /v1.0/users :(デフォルト)1 ページあたり 100 件を返す

サーバー側ページネーション

開発者のための Azure セキュリティ実装

クライアント側ページネーション

  • クライアントが1ページあたりの件数を指定

クライアント側ページネーション

開発者のための Azure セキュリティ実装

ページネーション用クエリパラメータ

  • クエリパラメータ

    • $top:1ページあたりの件数

    クエリパラメータ - Top

  • $skip:オフセット。最初の N 件をスキップして開始

    クエリパラメータ - Skip

開発者のための Azure セキュリティ実装

クライアント側ページネーションの例

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

クライアント側ページネーション

開発者のための Azure セキュリティ実装

バッチ処理の例え話:オンラインショッピングカート

  • 複数の商品を1つのカートに
  • 会計もレシートも1回

例え:オンラインショッピングカート

開発者のための Azure セキュリティ実装

バッチ処理

  • 複数の Graph リクエストを1回の HTTP 呼び出しにまとめる
  • 1つのペイロード → 1つのレスポンスですべての結果を取得

  • メリット

    • 通信回数が減り、レイテンシも低下
    • ダッシュボードに最適。
  • 制限

    • 1バッチあたり最大20件のリクエスト

バッチ処理

開発者のための Azure セキュリティ実装

バッチリクエストのエンドポイント

  • エンドポイント

    • メソッド:POST
    • エンドポイント:https://graph.microsoft.com/v1.0/$batch
  • users のような特定のリソースではなく $batch を使用

バッチリクエストのエンドポイント

開発者のための Azure セキュリティ実装

バッチリクエストのボディ

  • ボディは JSON オブジェクト
  • プロパティは requests の1つのみ
  • 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 セキュリティ実装

バッチレスポンス

  • 各エントリは1つのリクエストを表す
{
  "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...