1. 程式人生 > >擴展Microsoft Graph數據結構 - 架構擴展

擴展Microsoft Graph數據結構 - 架構擴展

office sta ges api 文章 amp 定義 定義域 單個

前言

此前我有一篇 文章 講解了Microsoft Graph的一種數據擴展技術—— 開發擴展(Open Extensions),它可以實現在支持的對象(例如用戶,組等)上面附加任意的數據。但開放擴展的問題在於,它是基於某個具體對象的,你無法確定兩個對象是否具有同樣的擴展(即便屬性名一樣,但也可能其包含的數據完全不同)。如果我們需要對一類對象進行統一的擴展,例如給組(Group)這個類型添加幾個特殊的屬性,此時就可以用到架構擴展這個非常強大的技術。

關於架構擴展,官方的文檔請參考 https://developer.microsoft.com/en-us/graph/docs/concepts/extensibility_schema_groups。

支持的類型

目前支持進行架構擴展的Microsoft Graph類型有如下幾個

  1. contact
  2. device
  3. event on a user or Office 365 group calendar
  4. post of an Office 365 group
  5. group
  6. message
  7. organization
  8. user

權限要求

要註冊架構擴展,必須使用Office 365的企業或學校賬號管理員身份,而且必須申請 Directory.AccessAsUser.All 這個權限(僅支持委派權限)。目前不支持在Microsoft Graph Explorer中進行操作,所以本文為了演示方便,已經註冊了一個Azure AD 應用程序,如下圖所示

技術分享圖片

同時,由於Directory.AccessAsUser.All 這個權限是管理員權限,所以還必須執行“管理員確認(admin consent)”的過程,這個倒也不難,你可以在瀏覽器中訪問如下的地址即可

https://login.microsoftonline.com/common/adminconsent?client_id=87b53490-05d4-4bed-8335-b50ed8b56130&state=12345&redirect_uri=http://localhost

註冊架構擴展

註冊架構擴展的命令其實很簡單,如果你用REST API的話,參考下面的範例執行即可

技術分享圖片

這裏的關鍵屬性是id。目前支持兩種定義id的方式,如果你的Office 365 租戶中註冊了自定義域名(例如 contoso.com),那麽你可以用 域名_擴展名

這樣的格式來定義id(上圖的例子就是這樣的),如果你沒有自定義域名,你可以直接用 擴展名 這樣的格式,例如 myextension。但為了進行區分,在你保存的時候,系統會自動地加上一個隨機的前綴,它的格式是ext+八位隨機字符_擴展名,例如extsjar451r_myextension。所以,前者要求略高一些,但對於後期使用更加方便一些;而後者因為id是隨機產生的,所以在使用過程會復雜一些。你可以根據自己的實際情況選擇。

下圖是我在Postman中註冊一個新的架構擴展的效果

技術分享圖片

使用架構擴展數據

我們已經擁有了一個新的架構擴展,接下來如何使用它呢?我同樣用Postman來演示創建一個新的Group對象,請註意,我除了提供標準的屬性外,還按照架構擴展的屬性定義提供了額外的信息。

技術分享圖片

你可能會發現,返回的結果中並沒有顯示出來我們添加的擴展屬性。如果需要查詢這些額外的屬性,你需要使用select關鍵字來指定返回值,如下圖所示。

技術分享圖片

結語

這一篇文章通過一個實例演示了使用架構擴展的技術為Microsoft Graph 的數據結構進行擴展,它跟開放擴展不同的地方在於,它可以為一類對象統一進行擴展,而不是針對單個對象,靈活地搭配使用這兩種技術,可以讓你充分利用Microsoft Graph,並且為其註入更多的數據,為後續的集成提供更多的可能性。

擴展Microsoft Graph數據結構 - 架構擴展