SlideShare a Scribd company logo
Microsoft Graphの変更通知で遊ぶ
2020.04 .NETラボ
誰?
@DevTakas
Angular / Azure / .NET Core / Azure DevOps / Microsoft Graph
誰?
ブログやってます
http://takasdev.hatenablog.com/
「はまったりひらめいたり…とか…」
おしながき
1. リソースの変更をどうやって検知することができるのか
• Delta
• Subscription
2. Subscriptionについて
• 使えるリソースについて
• 使いかた
3. Subscriptionを実装してみる
4. まとめ
(おさらい)Microsoft Graphとは
• Microsoftが提供するサービス・データに
アクセスできるエンドポイント
• TeamsのチャットやOutlookのイベント、Excelデータ等々…
• 単一エンドポイントhttps://graph.microsoft.comからアクセス
1.リソースの変更をどうやって検知することができるのか
・Delta
• Deltaクエリを利用する
• Microsoftのドキュメント的には「変更履歴」
• 👇のクエリのように「delta」を利用する
• https://graph.microsoft.com/v1.0/messages/delta/~~
• nextLink/deltaLinkプロパティにURLが返却される
• そのURLにアクセスすると変更分のデータのみが返却される
• サポートされるリソース
• https://docs.microsoft.com/ja-jp/graph/delta-query-overview#supported-resources
1.リソースの変更をどうやって検知することができるのか
・Deltaを実際に動かしてみる
• https://graph.microsoft.com/v1.0/me/calendar/calendarview/delta?startDateTime=2020-03-01&endDateTime=2021-01-01
👇予定追加前
👇予定追加後
1.リソースの変更をどうやって検知することができるのか
・Deltaの特徴
• 状態トークンを含むURLを使用して変更リソースのみ取得
• つまり一発目のデータ取得は絶対に必要となる
• クエリパラメータ込でデータ取得できる
1.リソースの変更をどうやって検知することができるのか
・Subscription
• Subscription(webhook)を利用する
• Microsoftのドキュメント的には「変更通知」
• 👇のクエリのように「subscriptions」を利用する
• https://graph.microsoft.com/v1.0/subscriptions
• リソースの変更があった場合に指定したWeb APIがCallされる
1.リソースの変更をどうやって検知することができるのか
・Subscriptionの特徴
• 一発目のデータ取得は不要
• 取得リソースの情報を取得することができない
• 変更されたリソースのIDなどが通知される
• 上記IDを利用し、Graph APIを使用して変更されたリソースを取得
• 有効期限は3日以内で指定する
• (有効期限の更新はできる)
2.Subscriptionについて
・使えるリソースについて
• https://docs.microsoft.com/ja-jp/graph/api/subscription-post-subscriptions?view=graph-rest-1.0&tabs=http#resources-examples
• 2019年12月の更新で、TeamsのchatMessageリソースがβに追加された
• https://docs.microsoft.com/ja-jp/graph/changelog#change-notifications-webhooks
2.Subscriptionについて
・使い方
• POST https://graph.microsoft.com/v1.0/subscriptions
• bodyに購読したいリソースの情報などを格納する
• Subscriptionは参照/作成/更新/削除が行える
• 更新は有効期限の更新のみっぽい
2.Subscriptionについて
・使い方
• Bodyに格納する情報
{
"changeType":"created,updated",
"notificationUrl":"https://...",
"resource":"me/events",
"expirationDateTime":"2020-04-21T00:0000.000Z“
}
2.Subscriptionについて
・使い方 – bodyに格納する情報について(ひとまず作成する時のみ抜粋)
• changeType - 変更の種類を指定
• 指定した種類によってwebhookが叩かれるタイミングが変化する
• created: 指定されたリソースのデータ作成時
• updated:指定されたリソースのデータ更新時
• deleted:指定されたリソースのデータ削除時
• リソースによって指定できるものが異なっていたりする
• driveリソースはupdateのみなど…
2.Subscriptionについて
・使い方 – bodyに格納する情報について(ひとまず作成する時のみ抜粋)
• notificationUrl:hookされる際に呼び出されるWebAPI
• 通知エンドポイント
• 検証依頼に応答できるWebAPIの必要がある
1. ValidationTokenクエリ付きのURLでアクセスされる
2. エンドポイントは下記の内容を返却する
• 200ステータス
• text/plainの検証トークン
• 検証依頼に応答できた場合にSubscriptionが確立される
2.Subscriptionについて
・使い方 – bodyに格納する情報について(ひとまず作成する時のみ抜粋)
• resource:変更通知を行う元のリソース
• 前ページに記載したドキュメントの通りに指定を行う
• イベント:me/events
• チャットの情報:chatMessage
などなど…
2.Subscriptionについて
・使い方 – bodyに格納する情報について(ひとまず作成する時のみ抜粋)
• expirationDateTime:Subscriptionの有効期限を指定する
• 3日以内の日付情報を指定する
• この値はSubscriptionの更新クエリで更新することができる
2.Subscriptionについて
・使い方 – どんなデータが通知されるのか
{
"value": [
{
"subscriptionId": "86a8e9e3-dc4b-481e-a306-8c88734b3bdb",
"subscriptionExpirationDateTime": "2020-04-06T13:54:06.928+00:00",
"tenantId": "",
"changeType": "updated",
"resource": "Users/83b3c8a6d89d594e/Events/AQMkADAwATM3ZmYAZS1jNGMzL…",
"resourceData": {
"@odata.type": "#Microsoft.Graph.Event",
"@odata.id": "Users/83b3c8a6d89d594e/Events/AQMkADAwATM3ZmYAZS1jNGM…",
"@odata.etag": "W/"DwAAABYAAABd3/Ci/G7PSafc4e+O89crAAKe930M"",
"id": "AQMkADAwATM3ZmYAZS…"
},
"clientState": null
}
]
}
2.Subscriptionについて
・使い方 – どんなデータが通知されるのか
{
"value": [
{
"subscriptionId": "86a8e9e3-dc4b-481e-a306-8c88734b3bdb",
"subscriptionExpirationDateTime": "2020-04-06T13:54:06.928+00:00",
"tenantId": "",
"changeType": "updated",
"resource": "Users/83b3c8a6d89d594e/Events/AQMkADAwATM3ZmYAZS1jNGMzL…",
"resourceData": {
"@odata.type": "#Microsoft.Graph.Event",
"@odata.id": "Users/83b3c8a6d89d594e/Events/AQMkADAwATM3ZmYAZS1jNGM…",
"@odata.etag": "W/"DwAAABYAAABd3/Ci/G7PSafc4e+O89crAAKe930M"",
"id": "AQMkADAwATM3ZmYAZS…"
},
"clientState": null
}
]
}
更新されたリソースそのものではなく
更新されたリソースへのアクセス情報が通知される
2.Subscriptionについて
・使い方 – どんなデータが通知されるのか
1. 通知を受け取る
2. 実行されたWebAPIなどでGraphリソースにアクセス
• 通知でされたリソースのID情報などを使用
3. よしなに
上記のような利用の仕方になる。
3.Subscriptionを実装してみる
FrontPage
①SignalR Negotiate ①SignalR Negotiate
③Event Create/Update
④Graph Subscription
⑤SignalR Subscription
⑥Event Request
Microsoft Graph
②Graph Subscription Setting
4.まとめ
• Graphリソースの変更を検知する方法は2つある
• DeltaとSubscription
• Deltaはクエリのみで完結する
• Frontのみで解決するような処理の場合はこちらの方が良いかも
• Subscriptionは通知先のWebAPIが必要となる
• リソースの変更をトリガーにバッチ的に何かをしたいときは
断然こっちの選択肢になるはず
• ただし、有効期限の寿命が短めなので更新フローを忘れずに!
• 規模が大きい会社は工夫が必要かも
• 通知量の桁が大きい。EventGridやQueueに逃がしてから…という手も
参考ページ
• デルタ クエリを使用して、Microsoft Graph データの変更を追跡する
• https://docs.microsoft.com/ja-jp/graph/delta-query-overview
• Microsoft Graph API を使用して変更通知を取得する
• https://docs.microsoft.com/ja-jp/graph/api/resources/webhooks?view=graph-rest-1.0
• ユーザー データの変更に関する通知の設定
• https://docs.microsoft.com/ja-jp/graph/webhooks#notification-endpoint-validation
• 今回デモのリポジトリ…
• https://github.com/Takas0522/GraphSubscriptionLearn

More Related Content

What's hot

SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 

What's hot (20)

Azure Data Box Family Overview and Microsoft Intelligent Edge Strategy
Azure Data Box Family Overview and Microsoft Intelligent Edge StrategyAzure Data Box Family Overview and Microsoft Intelligent Edge Strategy
Azure Data Box Family Overview and Microsoft Intelligent Edge Strategy
 
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
 
SharePoint Hub Sites について学ぶ
SharePoint Hub Sites について学ぶ SharePoint Hub Sites について学ぶ
SharePoint Hub Sites について学ぶ
 
Azure ADアプリケーションを使用した認証のあれやこれ
Azure ADアプリケーションを使用した認証のあれやこれAzure ADアプリケーションを使用した認証のあれやこれ
Azure ADアプリケーションを使用した認証のあれやこれ
 
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
 
SharePoint Online を JavaScript でイジる。
SharePoint Online を JavaScript でイジる。SharePoint Online を JavaScript でイジる。
SharePoint Online を JavaScript でイジる。
 
Office 365 勉強会「いまさらきけない? SharePoint の基礎のキソ」
 Office 365 勉強会「いまさらきけない? SharePoint の基礎のキソ」 Office 365 勉強会「いまさらきけない? SharePoint の基礎のキソ」
Office 365 勉強会「いまさらきけない? SharePoint の基礎のキソ」
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
Airflowで真面目にjob管理
Airflowで真面目にjob管理Airflowで真面目にjob管理
Airflowで真面目にjob管理
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
気づいたら市民開発者になっていた ー孤軍奮闘PowerAutomate
気づいたら市民開発者になっていた ー孤軍奮闘PowerAutomate気づいたら市民開発者になっていた ー孤軍奮闘PowerAutomate
気づいたら市民開発者になっていた ー孤軍奮闘PowerAutomate
 
【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 
カスタムリスト添付ファイル Power Apps をそえて
カスタムリスト添付ファイル Power Apps をそえてカスタムリスト添付ファイル Power Apps をそえて
カスタムリスト添付ファイル Power Apps をそえて
 
SharePoint 開発入門
SharePoint 開発入門SharePoint 開発入門
SharePoint 開発入門
 
AWS Instance Schedulerは、ぜひ使うべきなのか?
AWS Instance Schedulerは、ぜひ使うべきなのか?AWS Instance Schedulerは、ぜひ使うべきなのか?
AWS Instance Schedulerは、ぜひ使うべきなのか?
 
それは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower Automateそれは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower Automate
 
Azure Blob Storageへの様々なアクセス方法を比べてみた JAZUG12周年イベント
Azure Blob Storageへの様々なアクセス方法を比べてみた JAZUG12周年イベントAzure Blob Storageへの様々なアクセス方法を比べてみた JAZUG12周年イベント
Azure Blob Storageへの様々なアクセス方法を比べてみた JAZUG12周年イベント
 
SharePoint Online 外部共有を考える
SharePoint Online 外部共有を考えるSharePoint Online 外部共有を考える
SharePoint Online 外部共有を考える
 

Similar to Microsoft Graphの変更通知で遊ぶ

データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみようデータ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
Salesforce Developers Japan
 

Similar to Microsoft Graphの変更通知で遊ぶ (20)

TeamsのチャネルとやりとりするWeb Applicationを作ったお話
TeamsのチャネルとやりとりするWeb Applicationを作ったお話TeamsのチャネルとやりとりするWeb Applicationを作ったお話
TeamsのチャネルとやりとりするWeb Applicationを作ったお話
 
Azure Event HubsでGraph変更通知を受け取る
Azure Event HubsでGraph変更通知を受け取るAzure Event HubsでGraph変更通知を受け取る
Azure Event HubsでGraph変更通知を受け取る
 
僕はあなたを監視する(MS Graph Subscriptionのβで公開されたpresencesを使おう!)
僕はあなたを監視する(MS Graph Subscriptionのβで公開されたpresencesを使おう!)僕はあなたを監視する(MS Graph Subscriptionのβで公開されたpresencesを使おう!)
僕はあなたを監視する(MS Graph Subscriptionのβで公開されたpresencesを使おう!)
 
Microsoft Graphを使ってアプリケーションを作った時の話
Microsoft Graphを使ってアプリケーションを作った時の話Microsoft Graphを使ってアプリケーションを作った時の話
Microsoft Graphを使ってアプリケーションを作った時の話
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤
 
Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編
 
Microsoft Graphのことはじめ
Microsoft GraphのことはじめMicrosoft Graphのことはじめ
Microsoft Graphのことはじめ
 
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみようデータ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
 
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
 
20181120 HowtoFlow
20181120 HowtoFlow20181120 HowtoFlow
20181120 HowtoFlow
 
OData って何?
OData って何?OData って何?
OData って何?
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
 
猿でもわかる DevOps
猿でもわかる DevOps猿でもわかる DevOps
猿でもわかる DevOps
 
Skype for Business + Bot + Graph API
Skype for Business + Bot + Graph APISkype for Business + Bot + Graph API
Skype for Business + Bot + Graph API
 
20150905 stream analytics
20150905 stream analytics20150905 stream analytics
20150905 stream analytics
 
Data Orchestration with LogicFlow
Data Orchestration with LogicFlowData Orchestration with LogicFlow
Data Orchestration with LogicFlow
 
Developers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeDevelopers.IO 2019 Effective Datalake
Developers.IO 2019 Effective Datalake
 
Microsoft Search - Microsoft Graph connector と Search Federation の概要
Microsoft Search - Microsoft Graph connector と Search Federation の概要Microsoft Search - Microsoft Graph connector と Search Federation の概要
Microsoft Search - Microsoft Graph connector と Search Federation の概要
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
 
Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例
 

More from DevTakas

More from DevTakas (10)

Microsoft Graph Toolkitで手軽にM365フロント開発
Microsoft Graph Toolkitで手軽にM365フロント開発Microsoft Graph Toolkitで手軽にM365フロント開発
Microsoft Graph Toolkitで手軽にM365フロント開発
 
Azure Artifactsを触ってみよう
Azure Artifactsを触ってみようAzure Artifactsを触ってみよう
Azure Artifactsを触ってみよう
 
Azure Web PubSub Serviceを触ってみた
Azure Web PubSub Serviceを触ってみたAzure Web PubSub Serviceを触ってみた
Azure Web PubSub Serviceを触ってみた
 
Microsoft Graph Toolkitを使ってGraph開発を体験しよう
 Microsoft Graph Toolkitを使ってGraph開発を体験しよう Microsoft Graph Toolkitを使ってGraph開発を体験しよう
Microsoft Graph Toolkitを使ってGraph開発を体験しよう
 
Azure ADアプリケーションを使用した認証のあれやこれ ASP.NET Core編
Azure ADアプリケーションを使用した認証のあれやこれ ASP.NET Core編Azure ADアプリケーションを使用した認証のあれやこれ ASP.NET Core編
Azure ADアプリケーションを使用した認証のあれやこれ ASP.NET Core編
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おう
 
msal.js v2を触る
msal.js v2を触るmsal.js v2を触る
msal.js v2を触る
 
Azure AD Application を使用した認証のアレコレ
Azure AD Applicationを使用した認証のアレコレAzure AD Applicationを使用した認証のアレコレ
Azure AD Application を使用した認証のアレコレ
 
AzureADの認証で失敗した話
AzureADの認証で失敗した話AzureADの認証で失敗した話
AzureADの認証で失敗した話
 
msal.jsを使う
msal.jsを使うmsal.jsを使う
msal.jsを使う
 

Microsoft Graphの変更通知で遊ぶ