扩展Microsoft Graph数据结构 - 架构扩展
前言
此前我有一篇 文章 讲解了Microsoft Graph的一种数据扩展技术—— 开发扩展(Open Extensions),它可以实现在支持的对象(例如用户,组等)上面附加任意的数据。但开放扩展的问题在于,它是基于某个具体对象的,你无法确定两个对象是否具有同样的扩展(即便属性名一样,但也可能其包含的数据完全不同)。如果我们需要对一类对象进行统一的扩展,例如给组(Group)这个类型添加几个特殊的属性,此时就可以用到架构扩展
这个非常强大的技术。
关于架构扩展,官方的文档请参考 https://developer.microsoft.com/en-us/graph/docs/concepts/extensibility_schema_groups。
支持的类型
目前支持进行架构扩展的Microsoft Graph类型有如下几个
- contact
- device
- event on a user or Office 365 group calendar
- post of an Office 365 group
- group
- message
- organization
- 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数据结构 - 架构扩展的更多相关文章
- 扩展Microsoft Graph数据结构(开放扩展)
作者:陈希章 发表于 2018年1月2日 前言 Microsoft Graph是一张拥有巨大价值的网络,它定义了包括Office 365在内的资源的实体及其关系,它的价值体现在,随着用户积累的数据越来 ...
- [js插件开发教程]原生js仿jquery架构扩展开发选项卡插件
jquery插件一般是这么干的: $.fn.插件名称 = function(){}, 把插件的名称加在.fn上,在源码里面实际上是扩展到构造函数的原型对象上,如果你没看过jquery的源代码,或者你曾 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- Microsoft Graph 的 .NET 6 之旅
这是一篇发布在dotnet 团队博客上由微软Graph首席软件工程师 Joao Paiva写的文章,原文地址: https://devblogs.microsoft.com/dotnet/micros ...
- 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)
作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...
- Microsoft Azure Storage架构分析
Microsoft云存储服务分为两个部分,SQL Azure和Azure Storage.云存储系统的可扩展性和功能不可兼得,必须牺牲一定的关系数据库功能换取可扩展性.Microsoft实现云存储的思 ...
- 如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用
如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用 英文原文:https://developer.microsoft.co ...
- 【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)
Microsoft Graph 是 Microsoft 365 中通往数据和智能的网关. 它提供统一的可编程模型,可用于访问 Microsoft 365.Windows 10 和企业移动性 + 安全性 ...
- Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
随机推荐
- Android OpenGL ES 开发(十): 通过GLES20与着色器交互
1. 获取着色器程序内成员变量的id(句柄.指针) GLES20.glGetAttribLocation方法:获取着色器程序中,指定为attribute类型变量的id. GLES20.glGetUni ...
- rpm 相关问题
specfies multiple packages 错误 这是安装了多个相同的rpm包,所以无法卸载,可以加上--allmatches rpm -e xxx.rpm --allmatches err ...
- Rotation Proposals
Rotation Proposals 论文Arbitrary-Oriented Scene Text Detection via Rotation Proposals 这篇论文提出了一个基于Faste ...
- jsp常用的jstl语法
<c:forEach items="<object>" begin="<int>" end="<int>&q ...
- 一年java工作经验的面试题总结(持续更新中)
本人是17年6月份毕业的,3月份出来实习,算起来也是工作一年了吧,金三银四,博主也考虑换一份工作,于是最近面试了几家,总结一下面试中的问题,大家一起交流学习. 第一次面试 ①说下java类的加载 ② ...
- Unity3D脚本的生命周期(执行顺序)
Unity脚本中有许多固定的函数 例如Start();Update(); 而这些函数都有固定的执行顺序 搞清楚这些函数的执行顺序 对于我们理清代码的逻辑就显得尤为重要 举个简单的例子 //脚本A pu ...
- 用jquery实现日期控件
用jquery实现的日期控件,代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- unity A*寻路 (一)导出NavMesh数据
使用unity的API NavMesh.CalculateTriangulation 可以获取NavMesh数据 首先 我们创建一个新的工程 保存一个test场景 然后在场景中添加一个Plane作 ...
- Java 容器 接口
Java 中容器框架的内容可以分为三层: 接口(模型), 模板和具体实现. 在开发中使用容器正常的流程是,首先根据需求确定使用何种容器模型,然后选择一个符合性能要求的容器实现类或者自己实现一个容器类. ...
- 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明
1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...