做者:陈希章 发表于 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的资源上面进行数据扩展,以实现应用程序自身的数据保存。
我将在下一篇介绍另一种扩展方式:架构扩展。