扩展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扩展中脚本的运行机制 ...
随机推荐
- redux (一)
redux 是一个状态管理的库. redux认为页面所有的变化,都是基于状态的改变触发的,所以我们维护一个应用的时候,都是在维护这些状态.而 redux 就是为了维护状态而生的. API create ...
- error:org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
问题:调用的方法在一个接口类中,但我并没有注入那个被调用的类 解决:在UserEntity前加上@Autowired @Controller public class MainController { ...
- RDP 拒绝服务攻击
先看一下百度百科怎么定义的 靶机ip Win7: 192.168.123.19 Win7开远程桌面,为方便测试 需关闭防火墙 kali打开msf 进入 use auxiliary/dos/wind ...
- Excel IF函数怎么用
本例主要介绍Excel表格中IF函数的用法,包括基本用法.单条件.多条件表达及在数组函数中的用法和在数组函数中怎么表达多条件和单条件. 工具/原料 Excel IF函数语法介绍: 1 IF函数 ...
- Vue解析五之mounted
在mounted获得vue的实例要加 this.$nextTick(function () { // 代码保证 this.$el 在 document 中 }) mounted: function ( ...
- 初识mango DB
换工作了,第一次接触到mango数据库,有点云里雾里,整理一篇最基本的增删该查语句 百度百科说mango DB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据 ...
- 配置SecureCRT以SSH公钥方式登录服务器
为了更方便管理服务器,CRT一个功能非常方便.那就是可以使用私钥认证通过后直接连接,而且对于密码保护比较安全一点. 首先配置ssh Port 32812Protocol 2UseDNS noPubke ...
- 设计模式 --> (8)组合模式
组合模式 组合模式,是为了解决整体和部分的一致对待的问题而产生的,要求这个整体与部分有一致的操作或行为.部分和整体都继承与一个公共的抽象类,这样,外部使用它们时是一致的,不用管是整体还是部分,使用一个 ...
- Java实现单向链表基本功能
一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...
- logback常用配置详解及logback简介
logback 简介(一) Ceki Gülcü在Java日志领域世界知名.他创造了Log4J ,这个最早的Java日志框架即便在JRE内置日志功能的竞争下仍然非常流行.随后他又着手实现SLF4J 这 ...