此前我有一篇 文章 講解了Microsoft Graph的一種數據擴展技術—— 開發擴展(Open Extensions),它能夠實如今支持的對象(例如用戶,組等)上面附加任意的數據。但開放擴展的問題在於,它是基於某個具體對象的,你沒法肯定兩個對象是否具備一樣的擴展(即使屬性名同樣,但也可能其包含的數據徹底不一樣)。若是咱們須要對一類對象進行統一的擴展,例如給組(Group)這個類型添加幾個特殊的屬性,此時就能夠用到架構擴展
這個很是強大的技術。git
關於架構擴展,官方的文檔請參考 https://developer.microsoft.com/en-us/graph/docs/concepts/extensibility_schema_groups。github
目前支持進行架構擴展的Microsoft Graph類型有以下幾個瀏覽器
要註冊架構擴展,必須使用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`post
註冊架構擴展的命令其實很簡單,若是你用REST API的話,參考下面的範例執行便可3d
這裏的關鍵屬性是id。目前支持兩種定義id的方式,若是你的Office 365 租戶中註冊了自定義域名(例如 contoso.com),那麼你能夠用 域名_擴展名
這樣的格式來定義id(上圖的例子就是這樣的),若是你沒有自定義域名,你能夠直接用 擴展名
這樣的格式,例如 myextension
。但爲了進行區分,在你保存的時候,系統會自動地加上一個隨機的前綴,它的格式是ext+八位隨機字符_擴展名
,例如extsjar451r_myextension
。因此,前者要求略高一些,但對於後期使用更加方便一些;然後者由於id是隨機產生的,因此在使用過程會複雜一些。你能夠根據本身的實際狀況選擇。code
下圖是我在Postman中註冊一個新的架構擴展的效果對象
咱們已經擁有了一個新的架構擴展,接下來如何使用它呢?我一樣用Postman來演示建立一個新的Group對象,請注意,我除了提供標準的屬性外,還按照架構擴展的屬性定義提供了額外的信息。blog
你可能會發現,返回的結果中並無顯示出來咱們添加的擴展屬性。若是須要查詢這些額外的屬性,你須要使用select關鍵字來指定返回值,以下圖所示。
這一篇文章經過一個實例演示了使用架構擴展
的技術爲Microsoft Graph 的數據結構進行擴展,它跟開放擴展
不一樣的地方在於,它能夠爲一類對象統一進行擴展,而不是針對單個對象,靈活地搭配使用這兩種技術,可讓你充分利用Microsoft Graph,而且爲其注入更多的數據,爲後續的集成提供更多的可能性。