先日公開された下記動画を見て、面白そうだったのでMicrosoft Graphのバッチ処理を試してみることにしました。
Graph エクスプローラーを使ったAPIのテスト
上記動画でも使われていますが、Microsoft Graphの各APIをテストするのに便利なツール「Graph エクスプローラー」が用意されているので、今回はこれを使います。
- Graph エクスプローラーを開き、Microsoft アカウントでサインインします。
- 「サンプルをさらに表示」から「バッチ処理」をオンにします。
- 「GET を並列で実行する」をクリックし、「クエリを実行」ボタンをクリックします。
- 「応答のプレビュー」に、POSTしたリクエストの結果が表示されます。
{ "responses": [ { "id": "1", "status": 200, "headers": { "Cache-Control": "no-cache", "OData-Version": "4.0", "Content-Type": "application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8" }, "body": { "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(displayName,jobTitle,userPrincipalName)/$entity", "displayName": "**** ****", "surname": "****", "givenName": "****", "id": "****************", "userPrincipalName": "***********@outlook.jp", "businessPhones": [], "jobTitle": null, "mail": null, "mobilePhone": null, "officeLocation": null, "preferredLanguage": null } }, { "id": "3", "status": 200, "headers": { "Cache-Control": "private", "OData-Version": "4.0", "Content-Type": "application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8" }, "body": { "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('***********%40outlook.jp')/events", "value": [] } }, { "id": "2", "status": 200, "headers": { "Cache-Control": "private", "OData-Version": "4.0", "Content-Type": "application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8" }, "body": { "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('***********%40outlook.jp')/messages(from,subject,receivedDateTime,bodyPreview)", "value": [] } } ] }
この結果を見る限り、まとめて送信したリクエストはそれぞれ無事に処理できたようです。
これでMicrosoft Graphにおけるバッチ処理の概要は掴めました。
バッチ処理について
上記サンプルの通り、「$batch」エンドポイントに複数のリクエストをPOST送信することで、バッチ処理できます。
HTTP
POST https://graph.microsoft.com/v1.0/$batch Accept: application/json Content-Type: application/json
BODY
- 必須プロパティ:requests, id, url, method
- idプロパティを指定することで、各要求と応答を対応させることができます。
詳細は下記ドキュメント参照。
{ "requests": [ { "url": "/me", "method": "GET", "id": "1" }, { "url": "/me/messages", "method": "GET", "id": "2" }, { "url": "/me/drive/root/children", "method": "GET", "id": "3" } ] }
制限事項
「Microsoft Graph に関する既知の問題」にある通り、2019年6月時点では下記の制限事項があります。
- 入れ子になったバッチリクエストには未対応
- すべてのリクエストは同期実行
- トランザクション未対応
- リクエストは必ず相対URIで指定
- 一度に処理できるリクエストは20件まで
- 各リクエストは、他のリクエスト1つだけに依存可能(条件は「JSON バッチ処理」参照)
特にトランザクション未対応というのは中々ロックな制限ですね。
投げたら投げっぱなしです。
ただ、バッチ処理の完成度が上がるにつれて、これらの制限はなくなるとのことなので、いずれはもっと使い勝手が良くなるだろうと思います。
おわりに
今回はMicrosoft Graphのバッチ処理を触るのが初めてだったので、GETのみの簡単なリクエストだけでテストしましたが、バッチ処理はGETもPOSTも組み合わせて行うことができます。
複数のリクエストを1つにまとめることで効率良く処理できるようになるので、使用場面は多いだろうと思いますが、上記の通り、現状ではいくつかの制限事項があるので、今後のバージョンアップに期待したいところです。
この記事へのコメントはありません。