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 = 0;
            var cookieContainer1 = new CookieContainer();

            SharePointOnlineAuthenticationProvider provider = new SharePointOnlineAuthenticationProvider();

            endpointRequest.CookieContainer = provider.GetAuthenticationCookie(new Uri("https://cnblogtest.sharepoint.com"), "[email protected]",
                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

时间: 2024-10-25 14:40:00

SharePoint 基于 REST API使用简介的相关文章

[转]SQLITE3 C语言接口 API 函数简介

SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sqlite3_open( const char* filename, /* 数据库文件名, 必须为 UTF-8 格式 */ sqlite3** ppDB /* 输出: SQLite 数据库句柄 */ ); 说明: 该函数打开由 filename 指定的数据库, 一个数据库连接句柄由 *ppDB 返回(

你也可以玩转Skype -- 基于Skype API开发外壳程序入门

原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) Skype中文官网:http://skype.tom.com/ Skype全球官网:http://www.skype.com/ Skype也是世界上最开放,最具创新意识的IM工具,他提供了Skype API, Skype4COM, Skype4Java几种形式的开发接口给Skype爱好者编写Sky

基于Windows API的粒子随机运动C++实现

基于Windows API编写Windows动画演示程序,具有便捷.不依赖于IDE的特点. 以随机运动粒子系统为例,实现了该动画框架,C++代码与效果图像如下: #include <windows.h> #include <vector> using namespace std; //粒子数量 #define N 1024 //粒子类型 typedef struct Particle { float x, y; float speedx, speedy; COLORREF rgb;

基于ArcGIS API for Javascript的地图编辑工具

转自:http://www.cnblogs.com/znlgis/p/3505646.html 最近工作上需要用ArcGIS API for Javascript来开发一个浏览器上使用的地图编辑工具,分享一下一些相关的开发经验. 我开发的地图编辑工具是根据ESRI提供的例子修改而来的,参考的例子是https://developers.arcgis.com/en/javascript/jssamples/ed_default_editingwidget.html 我们下面只说一些需要注意的问题:

libvirt 基于C API基本使用案例

1,virConnectGetLibVersion API call obtain the version of libvirt software in use on the host it takes a connection pointer and unsigned long pointer as input, 2,virConnectGetVersion API call obtain version of the host virtualization software in use 3

通过python获取kvm虚拟机的监控信息(基于libvirt API)

通常在我们的云环境中,为了保证云平台中虚拟机的正常运行,基本都需要这样一个功能,就是收集虚拟机的监控数据,比如cpu的使用率.内存的使用率.磁盘io.网络io等基本信息.可以利用这些信息及时调整云平台环境中出现的一些问题,从而实现保证VM的正常运行. 说到KVM管理工具,首先应该想到的就是libvirt,因为目前对KVM使用最为广泛的管理工具(应用程序接口)就是libvirt.Libvirt本身构建于一种抽象的概念上,它为受支持的虚拟机监控程序实现常用功能提供通用的API.Libvirt提供了操

SharePoint 2013 &quot;通知我&quot;功能简介

功能简介 "通知我"主要是在列表或者文档库里面的项目,有添加/删除/修改等操作,发送邮件通知设置的用户的功能:可以针对列表或者文档库设置通知,也可以针对单一项目设置通知功能,是SharePoint的一个Out Of Box的功能. 使用必须首先在管理中心设置传出邮件,然后确保用户的Email属性里有邮件地址,最后配置通知即可.下面简单介绍下通知服务的配置. 一.管理中心配置邮件服务 1.打开管理中心System Settings,找到配置传出邮件设置,如下图: 2.配置邮件服务器地址.

基于ArcGIS API for WPF路径分析源码实例

说明: 本实例主要演示网络分析数据集制作,服务发布,最后基于ArcGIS API for WPF做路径分析. 本实例参考ArcGIS官方文档,想了解GIS网络分析可查阅官方文档. 本实例数据为西藏道路数据,若无数据可新建简单的线要素. 本实例使用软件及版本:ArcGIS10.2,ArcGIS APIfor WPF24,VS2010. 最后为了增加效果叠加局部离线卫星地图,需要安装水经注万能地图下载器(相当方便的卫星地图下载器),如果没有安装本软件,可以百度"水经注软件"到官方网站下载.

基于zabbix api根据hostname管理多个template

基于zabbix api根据hostname添加多个template 之前写了一个关联模版的api但是考虑到每个添加一个template是有点复杂,而且最近有那么一个需求,所以改了一下方法,使得可以根据hostname添加多个template. 话不多说直接上脚本和效果: (env1) ?  ~ cat zabbix_add_template.py #!/usr/bin/python #-*- coding:utf-8 -*- #__author__ == 'chenmingle' import