SharePoint 基于 REST API使用简介
之前已经介绍了SP2010中支持CSOM的API进行远程访问SharePoint,但是CSOM的API仍然有一定的局限性,首先使用CSOM类库是基于.Net的,因此也将使用CSOM限制在了.Net平台上(包括托管的.Net代码,Silver Light 以及Javascript)。如何能在非.Net平台上操作SharePoint数据呢?
本文简单介绍一下SharePoint REST api的使用方式,笔者本人也没有用到过相关技术进行开发,难免有理解不到位的地方。欢迎大家拍砖。
读懂此文章,建议你至少大概的知道,什么是REST api,为什么使用REST api,它的优势在哪。本文不会展开讲述讲述REST相关的知识。
REST API架构
从SharePoint2013开始,REST被集成到了SharePoint中,你可以创建一个RESTful 的HttpWebRequest来访问SharePoint数据。REST的大体架构如下:

首先,通过用OData标准,创建一个符合你想要调用的Client Object Model的API所匹配的Http请求。SharePoint服务器端在通过client.svc处理HttpRequest后,会返回相应的Atom或者JSON。
如何生成一个RESTful的HttpRequest
在SharePoint的Client Object Model,如果想要获取一个List对象,那么你需要
Lists.GetListByTitle
那么对应的Request地址为:http://server/site/_api/lists/getbytitle('listname') 。图片 link 完整的解释了根据CSOM生成HttpRequest的语法。
因此如果我们需要通过REST API来获取一个List,我们需要写如下的代码:
HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create("https://cnblogtest.sharepoint.com/_api/lists/getbytitle('Documents')");
endpointRequest.Method = "GET";
endpointRequest.Accept = "application/json;odata=verbose";
endpointRequest.Headers.Add("Authorization",
"Bearer " +serviceToken
HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();
如何解决权限的问题
关于serviceToken如何解决的问题,在msdn找了半天,目前我这边还没找到线程的例子,从msdn上的描述来看,OAuth 的解决方式主要用于host在provider上的app跟SharePoint 服务器间的权限认证。既然REST也是调用CSOM的另一种方式,我们就看一下CSOM是如实现权限的认证的。
下面我们运行一下SharePoint Client Object Model API 介绍以及工作原理解析 中的例子代码,截获一下这个代码的请求看一下CSOM的权限认证方式:
我们一共截取到如下的请求信息:

这里面,主要关注一下最后一次查询的报头:

这里面我们可以看到,通信主要是通过cookie来进行权限认证的,这里面我们也可以尝试一下用cookie来获取。
如何获取Cookie
实际上我们获取cookie只需要用代码来模拟我们截获到的这四次请求即可,让后替换掉里面一些诸如用户名,密码,Expire信息等相关的字符串。由于代码中认证的相关逻辑都是封装在了SharePointOnlineCredentials 这个类中,我们可以反编译看一下封装这个报头的相关逻辑,我们可以直接把里面的代码复制出来获取cookie即可。相关类如下:

这样getlistbytitle的调用代码如下:
HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create("https://cnblogtest.sharepoint.com/_api/lists/getbytitle('Documents')");
endpointRequest.Method = "GET";
endpointRequest.Accept = "application/json;odata=verbose";
endpointRequest.ContentLength = ;
var cookieContainer1 = new CookieContainer();
SharePointOnlineAuthenticationProvider provider = new SharePointOnlineAuthenticationProvider();
endpointRequest.CookieContainer = provider.GetAuthenticationCookie(new Uri("https://cnblogtest.sharepoint.com"), "test001@cnblogtest.onmicrosoft.com",
pasword);
HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();
var stream = endpointResponse.GetResponseStream();
using (StreamReader sw = new StreamReader(stream))
{
var line = sw.ReadToEnd();
}
返回的JSON格式的报文如下:

这样返回的JSON信息,就可以通过不同的语言来进行解析了。当然,如果你使用的是JS或者其他语言,获取cookie可能有其他方式,这里不再列举。
此例子用到的代码,可以以不同的编程语言的实现。SharePoint REST API,实现了基于其他语言的来访问SharePoint的可能性,这本身是REST本身的优势,也是SharePoint 2013带给编程人员一个大的功能优势。
参考文章:
http://msdn.microsoft.com/en-us/magazine/dn198245.aspx
http://msdn.microsoft.com/en-us/library/office/jj164022(v=office.15).aspx#WritingData
SharePoint 基于 REST API使用简介的更多相关文章
- dom4j API使用简介
dom4j API使用简介 功能简介 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极 ...
- RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介(转载)
RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介 今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口.好了,言归正传吧. N ...
- PHP imagick API中文简介
PHP imagick API中文简介imagick 类imagick ::adaptiveblurimage 向图像中添加 adaptive 模糊滤镜imagick ::adaptiveresize ...
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(四)
在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证.在 ...
- Atitit 游戏的通常流程 attilax 总结 基于cocos2d api
Atitit 游戏的通常流程 attilax 总结 基于cocos2d api 加载音效1 加载页面1 添加精灵1 设置随机位置2 移动2 垃圾gc2 点击evt2 爆炸效果3 定时生成精灵3 加载音 ...
- [转]SQLITE3 C语言接口 API 函数简介
SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...
- 你也可以玩转Skype -- 基于Skype API开发外壳程序入门
原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...
- 基于 Aliexpress API 的小程序 : 批量 Copy 产品到不同的店铺
第一个基于 Aliexpress API 的小程序 : 批量 Copy 产品到不同的店铺 还没来得及用 API 重写软件, 先写个小程序来缓解一下手工压力: 批量Copy 产品到不同的店铺. 开网店 ...
- 全国天气预报信息数据 API 功能简介与代码调用实战视频
此文章对开放数据接口 API 之「全国天气预报信息数据 API」进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用,并对实战开发进行了视频演示. 1. 产品功能 接口开放了 ...
随机推荐
- 【Django】Django model与数据库操作对应关系(转)
Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manag ...
- lnmp重置mysql密码
第一种方法:用军哥的一键修改LNMP环境下MYSQL数据库密码脚本一键脚本肯定是非常方便.具体执行以下命令: wget http://soft.vpser.net/lnmp/ext/reset_mys ...
- 判断Ie浏览器
ie8以下 if(!+[1,]) if(window.attachEvent){ alert("ie")}else if(window.addEventListener){aler ...
- Selenium2+python自动化31-生成测试报告
前言 最近小伙伴们总有一些测试报告的问题,网上的一些资料生成报告的方法,我试了都不行,完全生成不了,不知道他们是怎么生成的,同样的代码,有待研究. 今天小编写一下可以生成测试报告的方法.个人觉得也是最 ...
- Odoo report
- AutoResetEvent waitone set进一步理解补充
AutoResetEvent 的定义 //定义两个信号锁 AutoResetEvent ReadTxt = new AutoResetEvent(false); AutoResetEvent Uplo ...
- 使用事件等待句柄EventWaitHandler 实现生产者、消费者队列
using System; using System.Threading; using System.Collections.Generic; class ProducerConsumerQueue ...
- oracle 未找到提供程序。该程序可能未正确安装
使用ADO连接oracle数据库时,连接串使用Provider=OraOLEDB.Oracle时提示"未找到提供程序.该程序可能未正确安装". 原因:由于我之间安装oracle_o ...
- 【转】supervisor安装与配置
1.安装 宿主机环境:(Centos7) 宿主机环境 #yum install python-setuptools yum install python-setuptools#easy_install ...
- Android 隐藏软键盘方法
第一种:public static void hideInput(Activity activity) { View curFoc = activity.getCurrentFocus(); if ( ...