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. 产品功能 接口开放了 ...
随机推荐
- VC++ excel 2 operations
LPDISPATCH lpDisp; //lpdispatch,接口指针 // 设置为FALSE时,加上app.Quit(); // 否则EXCEL.EXE进程会一直存在,并且每操作一次就会多开一 ...
- Continue To DO!
(1)Valid Anagram 解题思路: 使用一个数组,首先遍历S相应位置加1,然后遍历T,判断此时如果相应位置为零返回FALSE,否则就减一.T遍历完毕后返回true. 代码如下: public ...
- .c文件如何编译为ko的MAKEFILE文件编写
首先需要知道: obj-m = *.o obj-y = *.o 上面两者的区别在于,前者才会生成ko文件,后者只是代码编译进内核,并不生成ko文件. 生成KO文件,分两种情况:单个.c文件和多个.c文 ...
- Linux内核模块简介
一. 摘要 这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程.主要从模块开发中的常用指令.内核模块程序的结构.模块使用计数以及模块的编译等角度对内核模块进行介绍.在Linux系统 ...
- 循序渐进Python3(一)-- 初识Python
一.Python起源
- enum 枚举的使用
在程序当中,我们经常定义一些常量来标识一些状态,类型等. 比如 定义订单的状态,可以定义为ORDER_STATUS_CANCEL = 1 表示订单状态为"订单已取消". 但是感觉定 ...
- fastjson基本使用 (待大量完善)
参考: http://blog.csdn.net/wx_962464/article/details/37612861 maven库下载 fastjson基本使用 import java.util.A ...
- 禅道Linux一键安装版
禅道Linux一键安装版 Linux一键安装包内置了apache, php, mysql这些应用程序,只需要下载解压缩即可运行禅道.从7.3版本开始,linux一键安装包分为32位和64位两个包,大家 ...
- 第2章 C#中的泛型
2.1 理解泛型2.1.1 为什么要有泛型 并不一定要使用字符T作为类型参数的名称,也可以使用其他的字符,但习惯上使用T. 2.1.2 类型参数约束什么是“向下的强制转换(downcast)”?因为O ...
- hdu 4006 The kth great number (优先队列)
/********************************************************** 题目: The kth great number(HDU 4006) 链接: h ...