SharePoint REST API - 基本操作(一)
博客地址:http://blog.csdn.net/FoxDave
本文讲述如何应用SharePoint的REST接口完成基本的增删查改操作。
使用SharePoint客户端API和REST服务进行开发
你可以使用SharePoint提供的REST接口执行基本的增删查改操作。REST接口暴露了所有的SharePoint客户端API中可操作的对象和操作。使用REST的优势是你可以不添加SharePoint类库或客户端的引用,而是使用HTTP请求访问特定的终结点来获取或更新SharePoint对象,如网站,列表和列表项。可以查看之前的文章了解SharePoint REST接口和架构的概述。
在之后的文章中也会对每个操作进行细致的介绍。
在SharePoint REST服务中的HTTP操作
SharePoint REST服务的终结点与客户端对象模型是对应的关系。通过使用HTTP请求,你可以使用REST终结点来对SharePoint对象执行经典的增删查改操作,如列表和网站。
通常情况下,终结点的读取操作对应HTTP的GET方法,更新对应POST,更新或添加操作对应PUT。在SharePoint中,使用POST来创建如列表或网站的SharePoint对象,方式是通过SharePoint REST服务发送包含对象定义的POST命令到集合终结点来创建对象,比如发送请求到http://<site url>/_api/web/lists来创建一个列表。
对于POST操作,任何不必填的属性都会被设置为它们的默认值。如果你想要通过POST操作设置只读属性,服务会返回异常。
使用PUT和MERGE操作来更新已经存在的SharePoint对象。任何一个表示设置属性的服务终结点都支持PUT和MERGE两种请求。对于MERGE请求,设置属性是可选的,任何没在请求中显式声明的属性都将保留当前的属性值。但是对于PUT操作,相当于刷新,任何没在请求中显式声明的属性都将被设置为默认值。而且,如果你不指定所有必填的属性,服务会返回异常。
使用HTTP的DELETE操作请求指定的终结点来删除SharePoint对象,对于能够回收的对象如列表、文件和列表项,执行的是删除到回收站的操作。
通过SharePoint REST接口来读取数据
使用SharePoint内置的REST,你可以构建一个使用OData标准的REST的HTTP请求,跟你想要使用的客户端对象模型是对应的。每个SharePoint对象都暴露在一个SharePoint网站的终结点,它们的数据是XML或者JSON格式。你可以使用任何语言构建HTTP请求,不只限于JavaScript和C#。
从REST终结点读取信息,你必须了解终结点的URL和暴露在其上的SharePoint对象的OData描述。例如,获取SharePoint网站的所有列表信息,你可以使用GET操作的请求到http://<site url>/_api/web/lists。你可以在浏览器中访问这个URL来查看返回的XML。当你在代码中执行请求的时候,你可以指定获取JSON还是XML格式的数据。
下面的代码展示了如何通过JQuery使用GET请求来返回一个网站的所有列表数据JSON数据。这里假设你有一个可用的OAuth访问令牌存储在accessToken变量中。当你在网站内部进行调用是不需要这个令牌的。注意你是不能通过运行在客户端的浏览器来获取访问令牌的,而是必须在服务器上获取。关于如何获取访问令牌,我们将在之后的文章中进行介绍。
HttpWebRequest endpointRequest =
(HttpWebRequest)HttpWebRequest.Create(
"http://<site url>/_api/web/lists");
endpointRequest.Method = "GET";
endpointRequest.Accept = "application/json;odata=verbose";
endpointRequest.Headers.Add("Authorization",
"Bearer " + accessToken);
HttpWebResponse endpointResponse =
(HttpWebResponse)endpointRequest.GetResponse();
如果使用SharePoint跨域库的话,代码会有一些不同。在这种情况下你不需要提供访问令牌。下面的代码展示了在使用跨域库时请求的样子,取而代之的会获取XML类型的返回数据。关于跨域库的使用以后有机会也会给大家进行分享。
var executor = new SP.RequestExecutor(appweburl);
executor.executeAsync(
{
url:
appweburl +
"/_api/SP.AppContextSite(@target)/web/lists?@target='" +
hostweburl + "'",
method: "GET",
success: successHandler,
error: errorHandler
}
);
下面的代码展示了如何用C#获取相关数据的示例,同样假定你已经获取到了访问令牌。
HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + "/_api/web/lists");
endpointRequest.Method = "GET";
endpointRequest.Accept = "application/json;odata=verbose";
endpointRequest.Headers.Add("Authorization", "Bearer " + accessToken);
HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();
获取资源未返回的属性
在你获取一个资源时会返回许多属性值,但是有些属性你必须显示地调用REST终结点进行获取,就像CSOM中有些属性需要显示声明来Load。比如从一个文件资源获取Author属性:
http:// _<site url>_/_api/web/getfilebyserverrelativeurl('/ _<folder name>_/ _<file name>_')/author
使用REST接口进行写入数据
你可以通过REST形式的HTTP请求更新SharePoint对象,和读取数据类似。一个关键的不同是写数据时需要使用POST请求,在更新SharePoint对象时,还要传递PUT或MERGE到X-HTTP-Method属性中。
另一个在创建、更新和删除SharePoint对象时需要的重要考虑是如果你使用的不是OAuth来授权你的请求的话,这些操作需要服务器的请求表单摘要值作为请求头中X-RequestDigest的值。你可以通过一个空白主体的POST请求到链接http://<siteurl>/_api/contextinfo来获取这个值(d:FormDigestValue节点),下面的代码展示了如何通过C#请求contextinfo。
HttpWebRequest endpointRequest =
(HttpWebRequest)HttpWebRequest.Create(
"http://<site url>/_api/contextinfo");
endpointRequest.Method = "POST";
endpointRequest.Accept = "application/json;odata=verbose";
HttpWebResponse endpointResponse =
(HttpWebResponse)endpointRequest.GetResponse();
如果你使用了脚本跨域库,SP.RequestExecutor会负责获取和发送摘要值。
如果你创建的是SharePoint托管的Add-in,你就不需要创建额外的HTTP请求来获取表单摘要值了,你可以通过在SharePoint页面上通过脚本来获取,如下代码,使用JQuery来创建一个列表。
jQuery.ajax({
url: "http://<site url>/_api/web/lists",
type: "POST",
data: JSON.stringify({ '__metadata': { 'type': 'SP.List' }, 'AllowContentTypes': true,
'BaseTemplate': 100, 'ContentTypesEnabled': true, 'Description': 'My list description', 'Title': 'Test' }
),
headers: {
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"content-length": <length of post body>,
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: doSuccess,
error: doError
});
下面的示例展示了如何更新上面创建的列表,更新了列表的标题。
jQuery.ajax({
url: "http://<site url>/_api/web/lists/GetByTitle('Test')",
type: "POST",
data: JSON.stringify({ '__metadata': { 'type': 'SP.List' }, 'Title': 'New title' }),
headers: {
"X-HTTP-Method":"MERGE",
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"content-length": <length of post body>,
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"IF-MATCH": "*"
},
success: doSuccess,
error: doError
});
下面的代码展示了如何创建一个网站。
jQuery.ajax({
url: "http://<site url>/_api/web/webinfos/add",
type: "POST",
data: JSON.stringify(
{'parameters': {
'__metadata': {'type': 'SP.WebInfoCreationInformation' },
'Url': 'RestSubWeb',
'Title': 'RestSubWeb',
'Description': 'REST created web',
'Language':1033,
'WebTemplate':'sts',
'UseUniquePermissions':false}
}
),
headers: {
"accept": "application/json; odata=verbose",
"content-type":"application/json;odata=verbose",
"content-length": <length of post body>,
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: doSuccess,
error: doError
});
SharePoint REST API - 基本操作(一)的更多相关文章
- SharePoint REST API - 基本操作(二)
博客地址:http://blog.csdn.net/FoxDave 上一节讲了SharePoint REST API的一些基本操作,本节将继续介绍一些关于SharePoint REST API的内容. ...
- Windows 商店应用中使用 SharePoint REST API
前面一篇我们介绍了 Office 365 REST API 的官方工具的使用,本篇我们来看一下 SharePoint REST API 本身的描述.结构和使用方法,以及一些使用经验. 首先来看看Sha ...
- How to Call SharePoint 2013 API Service to Query The Lists
How to Call SharePoint 2013 API In SharePoint 2013, we can query the list by it owner service, then ...
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表
写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...
- [sharepoint]Rest api相关知识(转)
写在前面 最近又开始弄rest api了,通过sharepoint rest api获取站点信息,Items,fields非常方便,再结合OData查询,更是得心应手.这里记录学习的时候用到的知识点, ...
- SharePoint REST API - 概述
博客地址:http://blog.csdn.net/FoxDave SharePoint REST API不同于传统的Server Object Model和Client Object Model ...
- SharePoint JavaScript API in application pages
前言 最近,在SharePoint 应用程序页中写JavaScript API,进行一些数据交互.其实,很简单的事情却遇到了问题,记录一下,希望能对遇到类似问题的人以帮助. 引用JavaScript ...
- HDFS API基本操作
对HDFS API基本操作都是通过 org.apache.hadoop.fs.FileSystem类进行的,以下是一些常见的操作: package HdfsAPI; import java.io.Bu ...
- SharePoint REST API - 列表和列表项
博客地址:http://blog.csdn.net/FoxDave 本篇主要讲述如何用SharePoint REST操作列表和列表项.阅读本篇时请先了解前面讲述的REST介绍和基本操作. 废话不多 ...
随机推荐
- vs2013添加mysql对EF的支持(转+说明)
在vs2013中使用mysql连接entityFramework经常会遇到这个问题:您的项目引用了最新实体框架:但是,找不到数据连接所需的与版本兼容的实体框架数据提供程序.请退出此向导,安装兼容提供程 ...
- ASP.NET发送电子邮件(转)
原始地址:http://www.cnblogs.com/ForEvErNoME/archive/2012/06/05/2529259.html(有代码下载,博主真是有操守) 1.补充知识 (1)POP ...
- Ubuntu深度学习环境搭建 tensorflow+pytorch
目前电脑配置:Ubuntu 16.04 + GTX1080显卡 配置深度学习环境,利用清华源安装一个miniconda环境是非常好的选择.尤其是今天发现conda install -c menpo o ...
- SAP 打开SAP物料帐期和财务账期
引http://blog.sina.com.cn/s/blog_494f9a6b0102e8zw.html 物料账期:Tcode MMPV和Tcode MMRV 财务账期:Tcode OKP1 和O ...
- noip2016组合数问题
题目描述 组合数 Cnm 表示的是从 n 个物品中选出 m 个物品的方案数.举个例子,从 (1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3) 这三种选择方法.根据组合数的 ...
- CP-ABE的使用
参考: http://acsc.cs.utexas.edu/cpabe/tutorial.html http://acsc.cs.utexas.edu/cpabe/ 事先先配置好cp-abe:http ...
- Vue为v-html中标签添加CSS样式
在最近的vue项目中遇到的问题:v-html渲染的富文本,无法在样式表中修改样式: <template> <div class="msgHtmlBox" v-ht ...
- windows开机锁定小键盘
1.启动注册表编缉器 按下windows+R键,输入regedit回车启动注册表编缉器 2.修改注册表默认值 展开HKEY_USERS\.DEFAULT\Control Panel\Keyboard将 ...
- jQuery封装 写的的确不错 转载
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间.这篇文章将概述jQuery插件开发的基本知识,最佳做法和常见的陷阱. 入门 编写一个jQuery插件开始于给jQuery.fn加入 ...
- 如何将两个字段合成一个字段显示(oracle和sqlserver的区别)
oracle中,如何将两个字段数据合并成一个字段显示,接下来看一下在sql server和pl/sql的区别 sql server中如何合并(用Cast()函数) --1.创建模拟的数据表--- cr ...