Windows 商店应用中使用 SharePoint REST API

前面一篇我们介绍了 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)[email protected]=‘<登录名>‘

角色:

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 有所帮助,谢谢。

时间: 2024-12-15 11:56:27

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

Windows系统Unity3D中的快捷键

[狗刨学习网] Windows系统Unity3D中的快捷键[td] 组合键 键 功能 File 文件 Ctrl   N New Scene 新建场景 Ctrl   O Open Scene 打开场景 Ctrl   S Save Scene 保存 Ctrl Shift S Save Scene as 保存场景为 Ctrl Shift B Build Settings... 编译设置... Ctrl   B Build and run 编译并运行 Edit 编辑 Ctrl   Z Undo 撤消 C

Sql Server2012 报表服务中的SharePoint集成模式配置

前言 http://www.microsoft.com/zh-CN/download/details.aspx?id=29068# 在sql server2012报表配置管理器上没有“sharepint集成”模式选择项(采用新建),如下图: 怎么回事情呢?后来通过查询资料才知道,如下: 重要提示 从 SQL Server 2012 版本开始,Reporting Services 配置管理员不设计用来管理 SharePoint 模式报表服务器. SharePoing 模式通过使用 SharePoi

Haskell ghci中调用pandoc的API进行markdown转换

所用环境:Windows Server 2008 + ghc 7.6.3(Haskell Platform 2013.2.0.0自带的) + pandoc 1.12.4 操作步骤: 1. 安装Haskell Platform,下载地址:http://www.haskell.org/platform/. 2. 安装pandoc,安装命令:cabal install pandoc 3. 在命令行中运行ghci 4. 引用pandoc的相应模块,在Prelude命令提示符中运行: :module Te

[Python-MATLAB] 在Python中调用MATLAB的API

可以参考官方的说明文档: http://cn.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for-python.html MATLAB Engine API的使用文档: http://cn.mathworks.com/help/matlab/matlab-engine-for-python.html 原材料: 1.MATLAB 2015a  32位的 2.Python 2.7.13    32位

【转载】Windows 10 mobile中无法注册后退键的解决方法

文章来源:http://wiki.9uads.com/?p=268 在做Windows Universal开发的时候,发现很多Windows Phone 8.1的api不能调用了,包括获取手机后退键的HardwareButtons.客户端设备信息EasClientDeviceInformation等,只需要在VS2015中添加 Microsoft Mobile Extension SDK for Universal App Platform 引用即可,方法如下图: 1.在项目中右键添加引用2.在

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

写在前面 最近又开始弄rest api了,通过sharepoint rest api获取站点信息,Items,fields非常方便,再结合OData查询,更是得心应手.这里记录学习的时候用到的知识点,以及查询的资料. Sharepoint Rest 端点URI结构 在可以使用 REST 服务访问 SharePoint 资源之前,首先必须知道指向该资源的 URI 端点.只要可能,这些 REST 端点的 URI 就会准确地模仿 SharePoint 客户端对象模型中资源的 API 签名.例如: 客户

Windows Dll Injection、Process Injection、API Hook

catalogue 1. 引言 2. 使用注册表注入DLL 3. 使用Windows挂钩来注入DLL 4. 使用远程线程来注入DLL 5. 使用木马DLL来注入DLL 6. 把DLL作为调试器来注入 7. 使用createprocess来注入代码 8. api拦截 9. Detours - Inline Hook 1.  引言 应用程序需要跨越进程边界来访问另一个进程的地址空间的情况如下 1. 我们想要从另一个进程创建的窗口派生子类窗口 2. 我们需要一些手段来辅助调试,例如我们需要确定另一个进

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

写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的地方 Rest API的简单应用 rest api方式实现对文档库的管理 通过WebClient模拟post上传文件到服务器 WebHttpRequest在sharepoint文档库中的使用 [sharepoint]Rest api相关知识(转) [sharepoint]根据用户名获取该用户的权限

cocos2d-x 3.2 for wp8-xaml应用商店提交应用时出现的API错误(不能用CreateEventExA)解决办法

好不容易做完一个游戏,提交到商店显示"本地API不支持CreateEventExA"之类的错误提示 于是我在整个解决方案里查找CreateEventExA,发现没有,却在Audio.h找到了CreateEventEx: StreamingVoiceContext() : hBufferEndEvent(CreateEventEx(NULL, FALSE, FALSE, NULL)) { } 刚开始由于懒,直接注释掉了这些,然后发现运行时出现闪退. 然后我查看CreateEventEx,