SharePoint REST API - 基本操作(一)

简介: 博客地址:http://blog.csdn.net/FoxDave本文讲述如何应用SharePoint的REST接口完成基本的增删查改操作。使用SharePoint客户端API和REST服务进行开发你可以使用SharePoint提供的REST接口执行基本的增删查改操作。

博客地址: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
});
相关文章
|
18天前
|
前端开发 JavaScript API
基于React的简易REST API客户端设计与实现
基于React的简易REST API客户端设计与实现
17 3
|
3月前
|
JSON 缓存 API
title: 深入理解REST API设计的最佳实践
title: 深入理解REST API设计的最佳实践
35 0
|
4月前
|
分布式计算 Hadoop Java
[hadoop3.x系列]HDFS REST HTTP API的使用(二)HttpFS
[hadoop3.x系列]HDFS REST HTTP API的使用(二)HttpFS
53 1
|
4月前
|
分布式计算 Hadoop API
✨[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
✨[hadoop3.x系列]HDFS REST HTTP API的使用(一)WebHDFS
58 1
|
4月前
|
JSON 前端开发 生物认证
REST API 的指纹验证机制
REST API 的指纹验证机制
29 0
|
5月前
|
JSON Kubernetes API
kubernetes REST Api详解(导入Swagger至Postman)
kubernetes REST Api详解(导入Swagger至Postman)
96 1
|
5月前
|
XML 资源调度 API
YARN REST API 总结
YARN REST API 总结
104 1
|
API
SharePoint API测试系列——Records.BypassLocks测试
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对于SharePoint中已经是Record的Item,我们想要修改他的属性,这在UI界面是无法完成的: 这时需要通过Records.BypassLocks API来完成。
896 0
|
7天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
13天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。