前言

本文完全原创,转载请说明出处,希望对大家有用。

通过[ Office 365 开发系列 ] 开发模式分析和[ Office 365 开发系列 ] 身份认证两篇内容的了解,我们可以开始使用Office 365提供的各项接口开发应用了,接下来会对其提供的主要接口一一分析并通过示例代码为大家讲解接口功能。

阅读目录

  1. Graph API介绍
  2. Graph API功能
  3. 示例分析

正文

Graph API介绍

最近Office 365发布了一项新的功能Delve,此项功能为用户提供了基于人员信息及搜索的发现,有点拗口,其实就是使用Graph API提供的一些列接口,如当前所处的组织、正在处理的文档以及与我相关的事件等等内容,让用户更快的发现与自己相关的内容。Office 365提供这样一个API集合有什么用呢,我们直接使用邮件、文件、AAD的接口也一样可以实现这些内容,事实上我们的确可以这么做,而Graph API是对这些更下层的API进行了封装,让我们不需要再深入了解每一项内容如何存储、如何获取,只需要关注业务本身的需求。下图是Graph API官方的结构图,我借用一下:

从上图所示的内容,我们可以发现Graph API是Office 365作为统一接口为我们提供服务访问的(主页中说:One endpoint to rule them all),我们可以不用了解Users信息是存放在哪里,Graph会帮你找到,我们可以不用了解如何从Outlook中获取邮件,Graph提供现成接口。这么一看,果然功能强大,不过值得注意的是,Graph API接口不是全能的,目前来说还是有一些限制,如对SharePoint Online的操作只局限于个人OneDrive站点。目前最新的版本的1.0,未来Graph API应该会增加更多功能。


Graph API功能

在我们使用者API前,先对API使用方法及提供的内容做一个简要的介绍。

在上一节[ Office 365 开发系列 ] 身份认证中我们讲解了如何获取资源Token,本节我们具体到使用Graph API,值得注意的是使用Graph API所用的终结点有国外版和中国版(21v运营)的区别,具体区别如下:

终结点

国际版Office 365

21Vianet Office 365

Azure AD终结点

https://login.microsoftonline.com

https://login.chinacloudapi.cn

Graph资源终结点

https://graph.microsoft.com

https://microsoftgraph.chinacloudapi.cn

Graph API是以Rest服务的方式提供,我们可以使用两种方式调用API,一种是使用JS AJAX方式调用API接口并将token包含在Authorization头中,另外一种是通过微软提供的Graph服务类来获取和解析数据。具体的调用方法我们在下面的Graph API示例分析中来分析,先来了解Graph目前能为我们提供什么。

目前Graph有两个版本(1.0/beta),区别在于我们调用时注意资源地址,API结构为

 https://graph.microsoft.com/{version}/{resource}?[odata_query_parameters]

对于Graph所提供的资源内容,请参阅官方文档


Graph API应用示例

为了更好的了解如何调用Graph API,我们以获取用户邮件为例,分别以AJAX和调用Graph服务类方式实现。

一、 使用Ajax调用Graph API

调用由一个html+js实现,如下所示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Graph API Demo</title><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
</head>
<body role="document"><table class="table table-striped table-bordered table-condensed table-hover"><thead><tr><th>接收时间</th><th>邮件主题</th></tr></thead><tbody class="data-container"><tr><td class="view-data-type"></td><td class="view-data-name"></td></tr></tbody></table><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script><script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.0/js/adal.js"></script><script src="App/Scripts/demo.js"></script>
</body>
</html>

(function () {var baseEndpoint = 'https://graph.microsoft.com';window.config = {tenant:  'bluepoint360.onmicrosoft.com',clientId: '08d87e99-f2dd-4b4d-b402-bcf7a5ea43ca',postLogoutRedirectUri: window.location.origin,cacheLocation: 'localStorage', // enable this for IE, as sessionStorage does not work for localhost.
    };var authContext = new AuthenticationContext(config);var $dataContainer = $(".data-container");authContext.acquireToken(baseEndpoint, function (error, token) {if (error || !token) {console.log('ADAL error occurred: ' + error);return;}$.ajax({type: "GET",url: baseEndpoint + "/v1.0/me/messages",headers: {'Authorization': 'Bearer ' + token,}}).done(function (response) {var $template = $(".data-container");var output = '';response.value.forEach(function (item) {var $entry = $template;$entry.find(".view-data-type").html(item.receivedDateTime);$entry.find(".view-data-name").html(item.subject);output += $entry.html();});$dataContainer.html(output);});});
}());

demo.js

OK,只要这两段代码就可以了,首先要运行起来,如果不知道如何注册应用到AAD,请参考[ Office 365 开发系列 ] 身份认证

上述代码的逻辑是通过调用graph api中的messages资源,获取用户邮件信息。

二、 使用Graph服务类调用

如果我们使用后台服务的方式为用户提供服务,则需要使用HttpWebRequest来发起rest请求,如果每个都由自己处理当然是可以,不过微软已经为我们提供了调用封装,那还是省点时间去做业务逻辑吧。

以MVC为例,我们为用户提供一个获取个人邮件的方法,示例代码基于Office Dev Center创建:

@model List<Tuple<string,string>>
<table class="table"><tr><th>接收时间</th><th>邮件主题</th></tr>@foreach (var item in Model){<tr><td>@Html.DisplayFor(modelItem => item.Item1)</td><td>@Html.DisplayFor(modelItem => item.Item2)</td></tr>}
</table>

显示页面

 public class DefaultController : Controller{public ActionResult Index(){return View();}public async Task<ActionResult> RetrieveUserEmails(){List<Tuple<string, string>> mailResults = new List<Tuple<string, string>>();try{GraphServiceClient exClient = new GraphServiceClient(new GraphAuthentication());QueryOption topcount = new QueryOption("$top", "10");var _Results = await exClient.Me.Messages.Request(new[] { topcount }).GetAsync();var mails = _Results.CurrentPage;foreach (var mail in mails){mailResults.Add(new Tuple<string, string>(mail.ReceivedDateTime.ToString(), mail.Subject));}}catch (Exception ex){return View(ex.Message);}return View(mailResults);}}public class GraphAuthentication : IAuthenticationProvider{public async Task AuthenticateRequestAsync(System.Net.Http.HttpRequestMessage request){AuthenticationResult authResult = null;var signInUserId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;var userObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;var tenantId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;AuthenticationContext authContext = new AuthenticationContext(string.Format("{0}/{1}", "https://login.microsoftonline.com", tenantId), new ADALTokenCache(signInUserId));try{authResult = await authContext.AcquireTokenSilentAsync("https://graph.microsoft.com", new ClientCredential("your client ID", "your client secret"), new UserIdentifier(userObjectId, UserIdentifierType.UniqueId));request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);}catch (AdalException ex){if (ex.ErrorCode == AdalError.FailedToAcquireTokenSilently){authContext.TokenCache.Clear();}}}}

MVC Controller

这里要注意,使用GraphServiceClient需要引用Microsoft.Graph程序集。


结束语

以上为Graph API的介绍,请继续关注后续博客。

转载于:https://www.cnblogs.com/renzh/p/5408258.html

[ Office 365 开发系列 ] Graph Service相关推荐

  1. [ Office 365 开发系列 ] 开发模式分析

    前言 本文完全原创,转载请说明出处,希望对大家有用. 在正式开发Office 365应用前,我们先了解一下Office 365的开发模式,根据不同的应用场景,我们选择最适合的开发模式. 阅读目录 Of ...

  2. [ Office 365 开发系列 ] 前言

    前言 本人从接触Microsoft SharePoint Server 2007到目前为止,已经在微软SharePoint的路上已经走了好几年,基于SharePoint平台的特殊性,对微软产品线都有了 ...

  3. 读书笔记-Office 365开发入门指南

    作者博客 Office 365 开发概览系列 - 随笔分类 - 陈希章 - 博客园  https://www.cnblogs.com/chenxizhang/category/967796.html ...

  4. 拥抱开源,Office 365开发迎来新时代

    前言 作为全球最大的开放源代码托管平台,Github在上周迎来了它的十岁生日.自从2008年正式上线以来,Github上面汇聚了数以千万计的开发人员和各种项目,它几乎成为了开源的代名词和风向标,各大软 ...

  5. 《Office 365 开发入门指南》

    终于等来了这一天,可以为我的这本新书画上一个句号.我记得是在今年的2月份从西雅图回来之后,就萌发了要为中国的Office 365开发人员写一些东西并最终能帮到更多中国用户的想法,而从2月26日正式写下 ...

  6. 《Office 365开发入门指南》上市说明和读者服务

    写在最开始的话 拙作<Office 365开发入门指南>上周开始已经正式在各大书店.在线商城上市,欢迎对Office 365的开发.生态感兴趣的开发者.项目经理.产品经理参考本书,全面了解 ...

  7. 拥抱开源, Office 365开发迎来新时代

    这个话题我曾经写过文章,也在一些场合做过专题分享.今天换一种方式,你可以直接点击下面这个小程序,用十分钟左右的时间,听我再讲一讲吧. 你需要在微信里面才能看到下面的小程序链接,并且可以直接点击 你可以 ...

  8. python office365_Python在Office 365 开发中的应用

    我在昨天发布的文章 -- 简明 Python 教程:人生苦短,快用Python -- 中提到了Python已经在Office 365开发中全面受支持,有不同朋友留言或私信说想了解更加详细的说明,所以特 ...

  9. 所有人都可以是开发人员——《Office 365开发入门指南》视频教程即将上市

    今天是春节假期的最后一天,在这里给全国的朋友们拜个晚年,祝大家身体健康,晚年幸福啊.这个春节大家过的怎么样啊,我自己是在老家过的年,家乡的年味还是比较浓的,也再次感谢朋友圈的大家给我看了各地的风光和不 ...

最新文章

  1. 可变和不可变的数据类型
  2. 【arduino】nodemcu(ESP8266)发送邮件库测试笔记,SMTP email
  3. linux8系统安装总结,硬盘安装Ubuntu 8.04经验总结(图)
  4. python子进程关闭fd_python – 捕获崩溃的子进程的“分段错误”...
  5. 信息学奥赛一本通(1095:数1的个数)
  6. 推荐系统——Item2vec
  7. 为什么当前互联网+法律发展艰难?
  8. Private strand flush not complete 说明
  9. iostat linux,iostat 命令详解
  10. scapy:收发数据包
  11. Ubuntu10.04下搞定D-Link DWA-125无线网卡驱动
  12. CISSP知识点汇总(已完结并通过考试)
  13. ps3本服务器维修,ps3端ftp服务器
  14. 【python爬虫】爬取链家二手房数据
  15. C#判断线段是否相交
  16. 自定义NDK交叉编译链(toolchain)
  17. SSM框架搭建(maven)
  18. 还在纠结配色问题?手把手教你用MATLAB一键生成高质量色卡
  19. 2021UpdateC#.NET笔试题高级进阶篇
  20. CPP-week thirteen

热门文章

  1. 哪一种Mac杀毒软件好用?这波安利绝对错不了
  2. html+css+layui实现简约登录界面
  3. 杂记2020-09-11
  4. L1-044 稳赢(15分) java
  5. leetcode【537】Complex Number Multiplication(复数相乘)
  6. Week 2 - Wed. Thu.
  7. CentOS 安装 nslookup
  8. 交互媒体技术—2D迷宫冒险游戏
  9. python在使用绝对路径时出现OSError: [Errno 22] Invalid argument: ‘E:\python\python扩展\text_file\pi_digits.txt
  10. 微信小程序发送多条服务通知