扩展Microsoft Graph数据结构(开放扩展)
作者:陈希章 发表于 2018年1月2日
前言
Microsoft Graph是一张拥有巨大价值的网络,它定义了包括Office 365在内的资源的实体及其关系,它的价值体现在,随着用户积累的数据越来越多,经过授权的应用程序可以在这些数据的基础上得到很多有价值的信息,并且帮助用户更好地完成工作。
Microsoft Graph也是Office 365从单纯的SaaS平台向PaaS平台(Office 365 as a Platform)发展的一个非常重要的基石。既然是一个平台,那么就自然会带来另外一个问题,如果我们有大量的应用是基于Microsoft Graph构建的,而这些应用或多或少是希望保存一些自定义数据的(例如用户的个性化信息),那么这些信息是保存在哪里比较合适?进一步来说,有没有可能在不同的应用之间共享数据呢?
Microsoft Graph通过两种方式来实现这个需求:应用程序可以将自定义数据存放在Graph里面(当然你无需知道具体怎么存),这些数据会一直跟随着目标的对象(例如用户,组等)。这从一方面降低了应用开发的复杂性,也无需承担自行维护这些数据的风险和成本,同时又为在Graph中为不同应用实现数据共享提供了支持。
这两种方式是“开放扩展”和“架构扩展”,前者更加简单,后者则更加强大。下面我分别来展开说明。
开放扩展
关于开放扩展的官方文档,请参考 https://developer.microsoft.com/zh-cn/graph/docs/api-reference/v1.0/resources/opentypeextension,本文带领大家入门,如果想要详细了解各种对象如何自定义扩展,则请参考官方文档。目前下面的对象支持开放扩展。
如果需要调用这个接口,则需要确保授予如下的权限:
下面我用实例介绍一下,如何为“用户对象”定义一个开放扩展,以便保存用户的“社交网络账号信息”。
首先,我们可以通过Post方法,为当前用户创建一个开放扩展(socialaccount),并且添加微信和微博的账号,如下图所示
然后就可以通过Get方法来读取这些属性了,如下图所示
如果要对属性进行修改,则试用PATCH方法,值得注意的是此时可以针对单个属性修改,例如
或者
最后,如果要删除这个开放式扩展,则试用DELETE方法即可。
看起来很方便吧,但需要注意的是,开放扩展是针对单个对象的,就好比上面的例子,我虽然给自己这个用户对象,扩展了一个socialaccount的属性集(里面有两个属性),但是其他用户并不会自动拥有这个扩展。
而且有意思的是,你可以给其他用户也定义开放扩展,但不要求数据格式一样。如下图,虽然我也是给 zhang@office365devlabs.onmicrosoft.com 这个用户定义了一个socialaccount的属性集,但我并没有为其提供微信和微博的账号信息,而是提供了twitter信息。
这种架构是允许的,究其根本原因,是因为开放扩展是针对单个对象的。这种设计带来了灵活性,但也会有一些潜在的问题,例如如果我不知道 zhang@office365devlabs.onmicrosoft.com 并没有定义微信的属性,然后去读取的话就可以会报错。
如果我们希望为某一类对象定义一个统一的扩展,就是让所有的对象实例都拥有一套统一的扩展属性集,则需要使用架构扩展。
结语
本文介绍了使用开放扩展的机制,在Microsoft Graph的资源上面进行数据扩展,以实现应用程序自身的数据保存。
我将在下一篇介绍另外一种扩展方式:架构扩展。
扩展Microsoft Graph数据结构(开放扩展)的更多相关文章
- 扩展Microsoft Graph数据结构 - 架构扩展
前言 此前我有一篇 文章 讲解了Microsoft Graph的一种数据扩展技术-- 开发扩展(Open Extensions),它可以实现在支持的对象(例如用户,组等)上面附加任意的数据.但开放扩展 ...
- 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 ...
- 如何使用 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扩展中脚本的运行机制 ...
- C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项
1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢 ...
- 在无人值守程序(服务)中调用Microsoft Graph
作者:陈希章 发表于 2017年5月31日 什么是无人值守程序(服务) 我在此前用了几篇文章分别介绍了在桌面应用程序(控制台),Web应用程序(ASP.NET MVC),以及PowerSehll脚本中 ...
- Microsoft Graph Web应用程序极致开发体验
作者:陈希章 重写于 2017年5月24日 前言 这篇文章最早写于2017年5月2日,当时的想法是从最简单的方式来写如何在一个ASP.NET MVC应用程序中集成Microsoft Graph,但实际 ...
随机推荐
- Activity讲解
Activity Activity 是 Android 应用的重要组成单元之一(另外三个是 Service.BroadcastReceiver 和 ContentProvider),而 Activit ...
- 崩溃 golang入坑系列
早上(11.30)收到邮件,Vultr东京机房网络故障.当时搭建SS时,考虑到了机房故障.所以特意分出了日本和香港两条线路.但千算万算,忘记数据库还在东京机房中. 现在网络故障,SS服务器无法读取数据 ...
- 如何打包静态库.framework文件 iOS
代码调试好了开始打包成sdk,下面是将要打包的FRSDK代码(FRSDK.h暴露在外面有别人调用) 1.创建新工程(Xcode File-New-Project) 2.把下面的红色框的东西移除 3.将 ...
- UWP Flyout浮动控件
看见没,点击"Options"按钮,浮动出来一个界面,这个界面可以用xaml自定义. 如果要点击的控件又Flyout属性那么,可以直接按照下面用 <Button Conten ...
- PHP 获取ip地址
public function getIP() { if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP& ...
- .Net Core实现将文件上传到七牛云存储
功能:将图片上传到七牛云存储 准备工作 注册七牛账号,提交实名认证(基本上1天内内审核通过) 登录七牛后台->对象存储->新建空间 (基本概念:https://developer.qini ...
- 【NOIP2012提高组】同余方程
https://www.luogu.org/problem/show?pid=1082 方程可化为ax+by=1. 用扩展欧几里得算法得到ax'+by'=gcd(a,b)的一组解后,可得x=x'/gc ...
- 转载 Mysql安装过程
目录 一.概述 二.MySQL安装 三.安装成功验证 四.NavicatforMySQL下载及使用 一.概述 MySQL版本:5.7.17 下载地址:http://rj.baidu.com/soft/ ...
- 我这样减少了26.5M Java内存!
WeTest 导读 历时五天的内存优化已经结束,这里总结一下这几天都做了什么,有哪些收获.优化了,或可以优化的地方都有哪些.(因为很多事还没做,有些结论需要一定样本量才能断定,所以叫一期)一期优化减少 ...
- 【Scala-ML】使用Scala构建机器学习工作流
引言 在这一小节中.我将介绍基于数据(函数式)的方法来构建数据应用.这里会介绍monadic设计来创建动态工作流,利用依赖注入这种高级函数式特性来构建轻便的计算工作流. 建模过程 在统计学和概率论中, ...