擴展Microsoft Graph數據結構(開放擴展)

做者:陳希章 發表於 2018年1月2日git

前言

Microsoft Graph是一張擁有巨大價值的網絡,它定義了包括Office 365在內的資源的實體及其關係,它的價值體如今,隨着用戶積累的數據愈來愈多,通過受權的應用程序能夠在這些數據的基礎上獲得不少有價值的信息,而且幫助用戶更好地完成工做。github

Microsoft Graph也是Office 365從單純的SaaS平臺向PaaS平臺(Office 365 as a Platform)發展的一個很是重要的基石。既然是一個平臺,那麼就天然會帶來另一個問題,若是咱們有大量的應用是基於Microsoft Graph構建的,而這些應用或多或少是但願保存一些自定義數據的(例如用戶的個性化信息),那麼這些信息是保存在哪裏比較合適?進一步來講,有沒有可能在不一樣的應用之間共享數據呢?api

Microsoft Graph經過兩種方式來實現這個需求:應用程序能夠將自定義數據存放在Graph裏面(固然你無需知道具體怎麼存),這些數據會一直跟隨着目標的對象(例如用戶,組等)。這從一方面下降了應用開發的複雜性,也無需承擔自行維護這些數據的風險和成本,同時又爲在Graph中爲不一樣應用實現數據共享提供了支持。微信

這兩種方式是「開放擴展」和「架構擴展」,前者更加簡單,後者則更增強大。下面我分別來展開說明。網絡

開放擴展

關於開放擴展的官方文檔,請參考 https://developer.microsoft.com/zh-cn/graph/docs/api-reference/v1.0/resources/opentypeextension,本文帶領你們入門,若是想要詳細瞭解各類對象如何自定義擴展,則請參考官方文檔。目前下面的對象支持開放擴展。架構

若是須要調用這個接口,則須要確保授予以下的權限:設計

下面我用實例介紹一下,如何爲「用戶對象」定義一個開放擴展,以便保存用戶的「社交網絡帳號信息」。code

首先,咱們能夠經過Post方法,爲當前用戶建立一個開放擴展(socialaccount),而且添加微信和微博的帳號,以下圖所示orm

而後就能夠經過Get方法來讀取這些屬性了,以下圖所示對象

若是要對屬性進行修改,則試用PATCH方法,值得注意的是此時能夠針對單個屬性修改,例如

或者

最後,若是要刪除這個開放式擴展,則試用DELETE方法便可。

看起來很方便吧,但須要注意的是,開放擴展是針對單個對象的,就比如上面的例子,我雖然給本身這個用戶對象,擴展了一個socialaccount的屬性集(裏面有兩個屬性),可是其餘用戶並不會自動擁有這個擴展。

並且有意思的是,你能夠給其餘用戶也定義開放擴展,但不要求數據格式同樣。以下圖,雖然我也是給 zhang@office365devlabs.onmicrosoft.com 這個用戶定義了一個socialaccount的屬性集,但我並無爲其提供微信和微博的帳號信息,而是提供了twitter信息。

這種架構是容許的,究其根本緣由,是由於開放擴展是針對單個對象的。這種設計帶來了靈活性,但也會有一些潛在的問題,例如若是我不知道 zhang@office365devlabs.onmicrosoft.com 並無定義微信的屬性,而後去讀取的話就能夠會報錯。

若是咱們但願爲某一類對象定義一個統一的擴展,就是讓全部的對象實例都擁有一套統一的擴展屬性集,則須要使用架構擴展。

結語

本文介紹了使用開放擴展的機制,在Microsoft Graph的資源上面進行數據擴展,以實現應用程序自身的數據保存。

我將在下一篇介紹另一種擴展方式:架構擴展。

相關文章
相關標籤/搜索