作者:陈希章 发表于 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数据结构(开放扩展)的更多相关文章

  1. 扩展Microsoft Graph数据结构 - 架构扩展

    前言 此前我有一篇 文章 讲解了Microsoft Graph的一种数据扩展技术-- 开发扩展(Open Extensions),它可以实现在支持的对象(例如用户,组等)上面附加任意的数据.但开放扩展 ...

  2. Microsoft Graph 的 .NET 6 之旅

    这是一篇发布在dotnet 团队博客上由微软Graph首席软件工程师 Joao Paiva写的文章,原文地址: https://devblogs.microsoft.com/dotnet/micros ...

  3. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

    作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...

  4. 如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用

    如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用 英文原文:https://developer.microsoft.co ...

  5. 【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)

    Microsoft Graph 是 Microsoft 365 中通往数据和智能的网关. 它提供统一的可编程模型,可用于访问 Microsoft 365.Windows 10 和企业移动性 + 安全性 ...

  6. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  7. C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项

    1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢 ...

  8. 在无人值守程序(服务)中调用Microsoft Graph

    作者:陈希章 发表于 2017年5月31日 什么是无人值守程序(服务) 我在此前用了几篇文章分别介绍了在桌面应用程序(控制台),Web应用程序(ASP.NET MVC),以及PowerSehll脚本中 ...

  9. Microsoft Graph Web应用程序极致开发体验

    作者:陈希章 重写于 2017年5月24日 前言 这篇文章最早写于2017年5月2日,当时的想法是从最简单的方式来写如何在一个ASP.NET MVC应用程序中集成Microsoft Graph,但实际 ...

随机推荐

  1. Less循环

    Less循环 在Less中,mixin可以调用它自身.通过这种递归调用,再结合Guard表达式和模式匹配,就可以写出各种循环结构.如,使用循环来创建一个网格类: .generate-columns(4 ...

  2. 面试相关-转载-well,yzl——持续更新

    转载yl,yzl大神的面经,顺便自己复习一下专业课的内容 操作系统相关: 什么是进程, 什么是线程.它们之间的区别和联系. 进程管理内存资源+运行过程, 线程只管理运行过程, 线程要在进程提供的资源基 ...

  3. Python中的单例模式

    在 Python 中,我们可以用多种方法来实现单例模式: 使用模块 使用 __new__ 使用装饰器(decorator) 使用元类(metaclass) # mysingleton.py class ...

  4. jquery 三级关联选择效果

    在网页制作中,三级关联选择经常遇到,于是归纳了一个进行参考 代码如下: <!DOCTYPE html> <html lang="en"> <head& ...

  5. 分布式版本控制系统 Git 教程

    简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...

  6. redis函数总结

    <?php /*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host, ...

  7. centos7 忘记mysql root密码办法

    1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的状态下,其他的用户也可以任意地登录和 ...

  8. 编写高质量代码—javascript的分层—base层

    base层的功能是为common层和page层提供接口.封装不同浏览器下javaScript的差异,提供统一的接口 1.用getNextNode 函数封装IE和Firefox的差异: 2.透明度:封装 ...

  9. Swagger服务API治理详解

    swager2的简介 在App后端开发中经常需要对移动客户端(Android.iOS)提供RESTful API接口,在后期版本快速迭代的过程中,修改接口实现的时候都必须同步修改接口文档,而文档与代码 ...

  10. json数据导出excel

    最近做的一个项目涉及到把数据导出到excel里面,网上找来找去,最终找到两种办法,废话不多说了 第一种: 拿到表格的id就可以抓取表格的数据,导出到excel,这种方式简单粗暴,引入这两个插件即可. ...