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

首先来看看SharePoint REST API 的概述:

REST API 服务是在 SharePoint 2013 中被引入的,官方认为 REST API 服务可以媲美于现有的 SharePoint 客户端对象模型。开发人员可以使用任何支持 REST Web 请求的技术(C#,javascript,java,oc 等等)以远程方式与 SharePoint 数据进行交互。这也就意味着,开发人员可以使用 REST Web技术和标准开放数据协议(OData)语法从其 SharePoint 相关应用程序、解决方案和客户端应用程序执行 CRUD 操作。而针对远程 Web 或移动应用,必须先获得访问权限,才能使用 SharePoint 数据资源。

在 REST API 出现之前,我们需要通过 client.svc 这个 WCF 服务来请求 SharePoint 的列表数据,而且仅限于获取数据。数据的修改并没有在这个服务中体现。而通过 REST API,我们可以完成前面提到的 CRUD 操作:使用OData 标准构造可实现 REST 的 HTTP 请求,对应到相应的请求方法,就可以对该资源进行读取或操作了。例如使用 GET 方法取得数据,使用 POST 方法来创建数据,使用 PUT 或 MERGE 方法来更新数据,使用 DELETE 方法来删除数据。

REST API 默认会返回 Atom 格式的数据,不过我们也可以根据需求设定返回 JSON 格式的数据。我个人更喜欢处理 JSON 格式,JSON 数据转换为 C# 的对象,有一个很棒的网站:http://json2csharp.com/。通过这个网站,我们可以把 JSON 数据直接转换为 C# 对象,节省了很多编写 C# 基础代码的时间。

接下来我们来看看 REST API 的结构组成:

端点的基本URL是:https://server/site/_api ,它是所有 SharePoint REST API 的基础,其中 server 代表服务器的名称,site 代表特定网站的名称或者路径。

如果要访问特定的网站集,URL是:https://server/site/_api/site,如果要访问特定的网站,URL则是:https://server/site/_api/web 。这两种是最常用的 API ,还有几种 API 能实现一些特定的功能,如:使用搜索服务:https://server/site/_api/search,访问用户配置文件:http://server/site/_api/SP.UserProfiles.PeopleManager等。

下面我们以特定网站为例,来看一下 REST API 能完成哪些常见操作:

(1)对列表和列表项的操作

列表:

URL:http://<网站 URL>/web/lists(guid'<列表 ID>') 或 http://<网站 URL>/web/lists/getbytitle('title of list')

列表项集合:

URL:http://<网站 URL>/web/lists(guid'<列表 ID>') /items 或 http://<网站 URL>/web/lists/getbytitle('title of list')/items

指定 ID 的列表项:

URL:http://<网站 URL>/web/lists(guid'<列表 ID>') /items(item id) 或 http://<网站 URL>/web/lists/getbytitle('title of list')/items(item id)

如上 API 地址所示,我们可以通过List 本身的 GUID 或者 Title 来获取List,或者List的项集合的数据。当需要向列表中插入新项时,我们需要使用列表项集合 API,使用 POST 方法插入数据。而需要修改列表中某一项时,则需要使用指定列表项 API,使用 MERGE 方法来更新数据。

而涉及到数据修改时,我们需要把方法类型,如 POST,MERGE 等作为X-HTTP_Method 键的值添加到请求标头中。而且需要将请求窗体摘要值作为 X-RequestDigest 的值传递进去。该值的获取方式是:向 http://网站URL/_api/contextinfo
发送具有空正文的 POST 请求,并在 contextinfo 终结点返回的 XML 中提取 d:FormDigestValue 节点的值。还有就是标头中的 IF-MATCH 键的值,需要赋值为列表或列表项的 etag 值。如果赋值为 “*”,则不会考虑并发问题。

另外关于数据操作是需要 POST 的内容:

更新时,必须包含 __metadata:type 和需要更新的字段。其他不需要更新的字段可以不加入。删除时,URL指向该条记录即可。添加时,URL指向记录集合,POST内容应包含__metadata:type 和需要插入的必填字段

(2)对文件和文件夹的操作

文件:

URL:http://<网站 URL>/_api/web/getfilebyserverrelativeurl('/<文件夹名称>/<文件名称>')

文件列表:

URL:http://<网站 URL>/_api/web/getfolderbyserverrelativeurl('/<文件夹名称>')/files

文件夹:

URL:http://<网站 URL>/_api/web/getfolderbyserverrelativeurl('/<文件夹名称>')

通过以上 API 操作,我们可以完成文件和文件夹的读取,上传和修改等操作。

当需要向文档库插入文档时,URL 是:http://<site url>/_api/web/GetFolderByServerRelativeUrl('/Shared Documents')/Files/add(url='a.txt',overwrite=true),这样,我们就把文件以 a.txt 为存放名称插入到了 Shared Documents 文档库中。而文档内容的上传过程是:文件读取为 Stream,放入 POST 内容中。文件还有其他很多中操作方式,如更新,签出,签入,删除等。

(3)对用户、组和角色的操作

组:

URL:http://<网站 URL>/_api/web/sitegroups(<组 ID>)

用户:

URL:http://<网站 URL>/_api/web/siteusers(@v)?@v='<登录名>'

角色:

URL:http://<网站 URL>/_api/web/roledefinitions(<角色定义 ID>)

(4)对用户配置文件的操作

URL:http://<网站 url>/_api/sp.userprofiles.peoplemanager

(5)对字段的操作

URL:http://<网站 url>/_api/web/fields('<字段 id>') 或 http://<网站 url>/_api/web/lists(guid'<列表 id>')/fields('<字段 id>')

上面我们介绍了列表,文件夹等类型 API 的地址构造,接下来我们看看这些请求地址中允许的查询参数都有哪些:

(1)$select 参数

如 SQL 中 Select 的使用方法,这里的 $select 也是确定请求返回的结果中需要包含哪些字段,使用方法是:_api/web/lists/getByTitle('Books')/items?$select=Author,Title,ISBN,这样我们就会在取得Books这个列表时,只获取作者,书名和ISBN三个有效字段。

(2)$filter 参数

如 SQL 中 Where 的使用方法,这里的 $filter 是用来筛选数据的筛选条件,使用方法是:_api/web/lists/getByTitle('Books')/items?$filter=Author eq 'Mark Twain',这样我们就能取到 Books 列表中,Author 为 Mark Twain 的数据。

(3)$expand 参数

这个参数用于指定返回联接列表中的哪些投射字段。使用方法是:_api/web/lists/getByTitle('Books')/items?$select=Title,PublishedBy/Name&$expand=PublishedBy,这里的投射字段是 PublishedBy。

(4)$top 参数

这个参数用户指定返回结果集中的前N项,使用方法是:_api/web/lists/getByTitle('Books')/items?$top=2,这样我们就会返回这个结果集中的前两项(如不足两项则返回全部数据)。

(5)$skip 参数

这个参数用于在结果集中跳过指定数量的项,而返回剩余的项。使用方法是:_api/web/lists/getByTitle('Books')/items?$skip=2,这样我们就会在返回结果中跳过前两项而返回其余的项,如结果不足两项,则返回空结果集。

(6)$orderby 参数

这个参数用于对结果集进行排序,如 SQL 中使用方法,分为升序和降序两种方式,以 asc 和 desc 关键字来标识。使用方法是:_api/web/lists/getByTitle('Books')/items?$orderby=ID desc。这样我们返回的结果集,就会以 ID 为标准来降序排列。

下面这张表,涵盖了 SharePoint REST API 中几乎所有的查询条件和数字、字符等的比较关键字。例如 $filter=Author eq 'Mark Twain',就是筛选 Author 等于 Mark Twain 的项,而 Author ne 'Mark Twain',则是筛选不等的项。这是针对字符串的比较操作,而针对数字的则包括  lt(小于)、le(小于等于)、gt(大于)、ge(大于等于)、eq(等于)和 ne(不等于)。还有针对日期和时间的比较符,见表中解释。

最后还涉及到一个授权的问题,如前面所说,远程访问都需要先授权才能访问资源。我们可以通过 OAuth 授权的方式来完成应用授权和身份验证。将获得的 OAuth 访问令牌加入到请求标头中。这里我们不做详细介绍了。关于 API本身的使用过程,和其他 API 没什么差异,这里就不做详细介绍了。就是一个发出请求,获得返回结果(Atom或JSON),然后解析结果的过程。

这样我们就把 SharePoint REST API 的构成和基本的使用方法介绍完了,希望对大家在 Windows 商店应用中使用 SharePoint REST API 有所帮助,谢谢。

Windows 商店应用中使用 SharePoint REST API的更多相关文章

  1. Windows 商店应用中使用 Office 365 API Tools

    本篇我们介绍一个API 工具,用于在 Windows Store App 中使用 Office 365 API. 首先来说一下本文的背景: 使用 SharePoint 做过开发的同学们应该都知道,Sh ...

  2. Windows 2012 R2中安装SharePoint 2013 sp1参考

    之前介绍过在window 2012中安装SharePoint 2013,这次,借着SharePoint 2013 sp1补丁发布之际,介绍下在window 2012 r2中安装SharePoint 2 ...

  3. 在Windows商店应用中使用浅色主题

    在开发商店应用时会遇到这样的情况,设计师给我们的设计是浅色背景/深色文本,而商店应用默认是深色背景/浅色文本.那我们需要在每个页面去显式声明背景色和前景色吗,这显然是不理想的.这时就需要设置应用的主题 ...

  4. 在 SharePoint 2013 中选择正确的 API 集

    决定使用哪个 API 集的因素   您可以在多个 API 集中选择一个来访问 SharePoint 2013 平台.您使用哪一个 API 集取决于以下因素: 应用程序的类型. 可能的类型包括但不限于以 ...

  5. [windows菜鸟]C#中调用Windows API的技术要点说明

    在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...

  6. 如何在 Windows Phone 8 中获取手机的当前位置

    原文 如何在 Windows Phone 8 中获取手机的当前位置 适用于:仅限于 Windows Phone 8. 本主题演示如何使用 Windows Phone 位置 API 确定手机的当前位置. ...

  7. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  8. 【转】深入Windows内核——C++中的消息机制

    上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图  Win32 ...

  9. 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期

    [源码下载] 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的 ...

随机推荐

  1. Sql 触发器禁用和启用

    --启用or禁用指定表所有外键约束 alter table tbname NOCHECK constraint all alter table tbname CHECK constraint all ...

  2. strcpy(),strcat()的用法

    strcpy(): 定义一个字符串char a[20],和一个字符串c[]="i am a teacher!"; 把c复制到a中就可以这样用:strcpy(a,c); 这个函数包含 ...

  3. 利用Redis解决Url过长的问题

    做网站,接手别人的代码,发现url有时候会过长导致页面直接翻掉. 后来想了一下可以利用redis将太长的地方暂存,加载页面时获取即可. 存Redis: /// <summary> /// ...

  4. dojo grid 编辑问题

    今天dojo grid编辑小问题,找了半天才找到问题, 1.问题 2.原因 数据单元没有索引列->id 3.修改前代码 <!DOCTYPE HTML> <html lang=& ...

  5. The Zero

    TOday is just a alpha, but there isnot 欧米伽. 编程,是你选的,是你学的,也是你喜欢的,更是你追求的.为什么要放弃塔!. 加油! 为自己. #include&l ...

  6. jquery制作省份城市地区多选控件总结

    1.弹出的选择框有jquery直接放在body后面,以position:absolute绝对定位,top,left处理位置. 如果想让该选择框位于点选元素下面,则获取点选元素位置 var target ...

  7. VaR实现实证

    投资组合Var计算实例 http://financetrain.com/analytical-approach-to-calculating-var-variance-covariance-metho ...

  8. WebStorm 8.0.1 注册码

    username:24718-12042010 key:00001h6wzKLpfo3gmjJ8xoTPw5mQvY YA8vwka9tH!vibaUKS4FIDIkUfy!!f 3C"rQ ...

  9. 部署war包后,新增tomcat服务器,启动tomcat服务器报错解决方法

    导入Maven工程后,新增tomcat服务器,启动服务器后,报如下错误: 使用http访问页面的时候报如下错误: 经过百度后,有一种方法可以解决: 在eclipse tomcat无法启动,无法访问to ...

  10. extjs学习之Ext.selection.CheckboxModel

    Ext.onReady( function() { var store=Ext.create('Ext.data.Store', { storeId:'simpsonsStore', fields:[ ...