扩展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,但实际 ...
随机推荐
- Nomad入门
Nomad 简介 Nomad是一个管理机器集群并在集群上运行应用程序的工具. Nomad的特点: 支持docker,Nomad的job可以使用docker驱动将应用部署到集群中. Nomad安装在li ...
- 【转】Cmder--Windows下命令行利器
原文链接:https://www.cnblogs.com/zqzjs/archive/2016/12/19/6188605.html cmder cmder是一个增强型命令行工具,不仅可以使用wind ...
- mysql分区分表
为毛要分表和分区,,,,所有数据库的通病,文件越大,性能越低...那问题就来了.数据越多文件越大...无解?哎,所以说知道 为毛要分区了吧!那分表又是毛线?分表就是把一张表拆分成若干表,,,根据情况常 ...
- WireShark 使用
1.干货 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直 ...
- CSS书写规范与理论
前端体系的变化可谓是日新月异,短短一年时间,从理论.框架.构建工具.甚至开发语言都发生非常大的变化. 随着新项目就即将启动,我抽时间回顾了一下以往项目的前端架构,零零散散产生了许多想法,尽量一一记录下 ...
- TL-WR703Nv1.7刷写openwrt固件
TP-LINK TL-WR703N是一个小型的路由器,可以有线转WiFi,3G转WiFi,很多人拿它刷openwrt系统,然后可以在上面各种搞事. V1.7以前 通常刷openwrt的做法是, 下载一 ...
- ios7 以后准确获取iphone设备的MAC(物理地址)
通过参考 钉钉 项目,知道是通过wifi拿到路由的MAC地址.那么可不可以拿到iphone 设备的MAC 地址呢? 经过一番搜索,发现所有文章都是针对 ios 7 以前 可以拿到. 而且方法也都是同一 ...
- 初识java这个小姑娘(一)
忽然想起这样一个场景:那时我还是小学三年级的一个小学生,上课的铃声响起,文艺委员起头,大家开始胡乱的开始唱歌,"让我们荡起双桨,小船儿推开波浪",歌声在一片稚气中慢慢停止.我们的语 ...
- 机器学习笔记1 - Hello World In Machine Learning
前言 Alpha Go在16年以4:1的战绩打败了李世石,17年又以3:0的战绩战胜了中国围棋天才柯洁,这真是科技界振奋人心的进步.伴随着媒体的大量宣传,此事变成了妇孺皆知的大事件.大家又开始激烈的讨 ...
- 学习customEvent
title: 认真学习customEvent tags: DOM date: 2017-7-22 23:20:57 --- 最近要实现一个模拟的select元素组件,所以好好看了这个自定义事件api, ...