博客地址: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 - 基本操作(一)的更多相关文章

  1. SharePoint REST API - 基本操作(二)

    博客地址:http://blog.csdn.net/FoxDave 上一节讲了SharePoint REST API的一些基本操作,本节将继续介绍一些关于SharePoint REST API的内容. ...

  2. Windows 商店应用中使用 SharePoint REST API

    前面一篇我们介绍了 Office 365 REST API 的官方工具的使用,本篇我们来看一下 SharePoint REST API 本身的描述.结构和使用方法,以及一些使用经验. 首先来看看Sha ...

  3. 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 ...

  4. [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表

    写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...

  5. [sharepoint]Rest api相关知识(转)

    写在前面 最近又开始弄rest api了,通过sharepoint rest api获取站点信息,Items,fields非常方便,再结合OData查询,更是得心应手.这里记录学习的时候用到的知识点, ...

  6. SharePoint REST API - 概述

    博客地址:http://blog.csdn.net/FoxDave SharePoint REST API不同于传统的Server Object Model和Client Object Model ...

  7. SharePoint JavaScript API in application pages

    前言 最近,在SharePoint 应用程序页中写JavaScript API,进行一些数据交互.其实,很简单的事情却遇到了问题,记录一下,希望能对遇到类似问题的人以帮助. 引用JavaScript ...

  8. HDFS API基本操作

    对HDFS API基本操作都是通过 org.apache.hadoop.fs.FileSystem类进行的,以下是一些常见的操作: package HdfsAPI; import java.io.Bu ...

  9. SharePoint REST API - 列表和列表项

    博客地址:http://blog.csdn.net/FoxDave 本篇主要讲述如何用SharePoint REST操作列表和列表项.阅读本篇时请先了解前面讲述的REST介绍和基本操作. 废话不多 ...

随机推荐

  1. English trip Spoken English & Word List(updating...)

    Word List 词汇 Square  英 [skweə]  美 [skwɛr]  adj. 平方的:正方形的:直角的:正直的. 使成方形:与…一致 vi. 一致:成方形 n. 平方:广场:正方形 ...

  2. OPSF - 2,状态机

    1,报文更新地址     点到点:所有报文发送224.0.0.5     虚链路:单播地址     广播网络上:DR OTHER至DR/BDR 224.0.0.6,DR/BDR至DR OTEHER 2 ...

  3. 使用AutoCloseable 实现自动关闭资源

    一.认识AutoCloseable AutoCloseable接口位于java.lang包下,从JDK1.7开始引入. 1.在1.7之前,我们通过try{} finally{} 在finally中释放 ...

  4. You Don't Know JS: Scope & Closures (第一章:什么是Scope)

    Content What is Scope? Lexical Scope Function Vs. Block Scope Hoisting Scope Closures Appendix: Dyna ...

  5. php 常用设计模式demo

    <?php//__get()//__set()当对象中属性不存在时调用该魔术方法//__call()当对象中方法不存在时//__callStatic()静态方法//__string()当对象不能 ...

  6. Pandas读取文件

    如何使用pandas的read_csv模块以及其他读取文件的模块?? 一起来看一看 Pandas中read_csv和read_table的区别 注:使用pandas读取文件格式为pandas特有的da ...

  7. K8S各知识点整理

    一.k8s组成部分 Master 1.   kube-apiserver 封装了核心对象的增删改查操作,以REST API接口方式提供给外部和内部组件调用.它维护的REST对象将持久化到Etcd中 2 ...

  8. element upload 一次性上传多张图片(包含自定义上传不走action)

    最重要的都圈出来了

  9. php多线程代码

    <?php$thNum = 20; //20个进程$total = 20000;//总数$pageNum=100;//每个页面显示100条数据 $pageCount = ceil($total/ ...

  10. P2756 飞行员配对方案问题

    题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外 ...