此前我有一篇 文章 讲解了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,而且为其注入更多的数据,为后续的集成提供更多的可能性。