了解和使用SharePoint2013REST接口

  • 格式:docx
  • 大小:31.31 KB
  • 文档页数:19

了解和使用SharePoint2013REST接口

SharePoint 2013 提供了一个具象状态传输 (REST) 接口,从而向标准 Web 技术和语言开放了 SharePoint 2013 开发平台。 一直以来,Web 应用程序都可通过客户端对象模型使用 SharePoint 的功能,但这些 API 只对 .NET 应用程序和语言可用。 SharePoint 2013 中覆盖范围广泛的 REST 接口使得标准 Web 语言(JavaScript 或 PHP)及支持 REST 的其他任意技术堆栈或语言都可访问 SharePoint 的大多数功能和实体。

REST 接口不需要引用客户端程序集,因而可减小 Web 应用程序的代码尺寸——这对于移动应用程序来说尤为重要。 对于针对非

Microsoft 平台(如 iOS 和 Android 设备)编写的移动应用程序来说,REST 具有明显的优势,但即使对于 Windows 8 应用程序开发人员而言,它也是一项有用的资源。 使用 HTML5 和 JavaScript 编写的

Windows 8 应用程序可能需要借助 REST 接口才能实现 SharePoint

操作,而关心应用程序大小的 C# 开发人员也可能会考虑使用

REST。 本文将演示如何利用该接口将 SharePoint 平台的强大功能融入您的应用程序,以及如何借助 SharePoint 实体执行高级操作。

基本信息

远程 Web 或移动应用程序必须先获得访问授权,而后才能使用

SharePoint。 在 SharePoint 2013 中,授权访问 SharePoint 站点(无论是否使用 REST)的方法一般有两种。 第一种方法涉及到对

SharePoint 用户进行身份验证,在这种情况下,应用程序具有与用户相同的 SharePoint 数据和功能访问权限。 其他从 Web 或移动应用程序对用户执行身份验证的方法超出了本文的论述范围,但我们将简要介绍一下 SharePoint 2013 中的两个新选项,因为它们会影响构建

REST 请求的方式:

• 如果是从无法以独占方式使用客户端代码(HTML 和 JavaScript)的远程托管应用程序调用 SharePoint,且 SharePoint 与应用程序之间没有防火墙阻隔,则可使用 OAuth 2.0 令牌(使用 Microsoft 访问控制服务 (ACS) 作为安全令牌服务器)。

• 如果客户端代码和登录到 SharePoint 的用户的权限足够,则

JavaScript 跨域库 () 将是一个很好的 OAuth 替代品。 另外,当进程调用需要穿过防火墙时,跨域库也是替代 OAuth 的一个好选择。 MSDN 库文章“SharePoint 2013 数据访问选项”() 详细介绍了这些选项。

使用 OAuth MSDN 库文章“SharePoint 2013 中的应用程序授权和身份验证”() 详细介绍了 OAuth 在 SharePoint 2013 中的工作原理,以及如何为应用程序获取访问令牌。 得到令牌后,需要在每个

REST 请求中传递它。 为此,需要添加一个 Authorization 报头并将访问令牌作为其值进行传递(要在令牌前加上“Bearer”):

Authorization: Bearer access_token

有关执行该操作的 C# 和 JavaScript 代码示例,请参阅 MSDN 库文章“操作方法:如何使用 SharePoint 2013 REST 端点完成基本操作”() 中的“使用 SharePoint 2013 REST 接口读取数据”一节。 该示例(检索 SharePoint 站点上的所有列表)展示了传递 OAuth 令牌的基本 REST 请求,如下所示:

1.

2. HttpWebRequest endpointRequest =

3. (HttpWebRequest)HttpWebRequest.Create(

4. 'http:// /_api/web/lists');

5. endpointRequest.Method = 'GET';

6. endpointRequest.Accept = 'application/json;odata=verbose';

7. endpointRequest.Headers.Add('Authorization',

8. 'Bearer ' accessToken);

9. HttpWebResponse endpointResponse = 10. (HttpWebResponse)endpointRequest.GetResponse();

11.

使用 JavaScript 跨域库 SharePoint 跨域库包含在

SP.RequestExecutor.js 文件(该文件位于 SharePoint 服务器上的

/_layouts/15/ 虚拟目录中)中。 要使用它,请在远程 Web 页面上加载该文件。 在 JavaScript 中,创建一个 SP.RequestExecutor 对象,然后调用其 executeAsync 方法。 需要将构建 HTTP 请求所需的信息作为该方法的参数传递给 REST 服务。 使用 OAuth 的 REST 调用与使用跨域库的 REST 调用之间的主要区别是:后者无需在请求中传递访问令牌,但必须在 REST 风格的 URL 中指定将作为客户端上下文站点的 SharePoint Web 站点。 MSDN 库文章“操作方法:使用跨域库从远程应用程序访问 SharePoint 2013 的数据”() 更详尽地探讨了这些细节(如应用程序 Web 与主机 Web 之间的差异)。 该示例(检索

SharePoint 站点上的所有列表)展示了使用跨域库的 REST 请求,如下所示:

1.

2. var executor = new SP.RequestExecutor(appweburl);

3. executor.executeAsync(

4. {

5. url:

6. appweburl

7. '/_api/SP.AppContextSite(@target)/web/lists?@target=''

8. hostweburl ''',

9. method: 'GET',

10. headers: { 'Accept': 'application/json; odata=verbose' },

11. success: successHandler,

12. error: errorHandler

13. } 14. );

15.

构建 REST 风格的 URL SharePoint REST 服务的实现位于

client.svc 文件(该文件位于 SharePoint Web 站点上的 /_vti_bin 虚拟文件夹中)中,但 SharePoint 2013 支持使用缩写“_api”代替“_vti_bin/client.svc”。下面是每个端点的基本 URL:

http:////_api/

特定端点的服务相关 URL 附加在该基本 URL 之后;例如,可以使用下面的 URL 检索 SharePoint 站点上的列表:

http:////_api/web/lists

可以通过指定 ID 的方式获取特定列表的引用,或者,如下面示例中那样指定标题:

_api/web/lists/getByTitle('samplelist')/

这些示例中的“web”并非占位符——它是 SharePoint 客户端对象模型中某个 Web 类对象的名称;“lists”是一个集合属性的名称,而“getByTitle”是该集合对象的方法。 这种范例使得 Microsoft 能够将端点与 JavaScript 对象模型的 API 引用结合起来使用;有关示例,请参阅 和 处的 SP.Web.lists 和 SP.ListCollection.getByTitle。 此外,这种语法也大致反映了 SharePoint 的租赁结构。 在 _api/site 处获取有关网站集的信息;在 _api/web 处获取有关 SharePoint Web 站点的信息;在 _api/web/lists 处获取有关某 Web 站点中所有列表的信息。 最后一个 URL 提供了一个包含 SharePoint 站点上所有列表的列表集合。 此外,还可以通过在开发站点集合上导航至这些 URL 来了解如何以 XML 表示这些对象。 SharePoint 内容对象模型的所有主要类都可用,包括网站集、Web 站点、列表、文件夹、字段和列表项。可以通过 er ()、erCollection ()、SP.Group () 和 SP.GroupCollection () 类获取有关用户的信息。 图 1 中的表格列出了用于读取操作的各个端点的示例。

图 1 用于读取操作的端点

URL 返回结果

_api/web/title 当前站点的标题

_api/web/lists(guid'') 一个列表

_api/web/lists/getByTitle('Announcements')/fields Announcements 列表中的列

_api/web/lists/getByTitle('Task')/items Task 列表中的项目

_api/web/siteusers 站点中的用户

_api/web/sitegroups 站点中的用户组

_api/web/sitegroups(3)/users 组 3 中的用户

_api/web/GetFolderByServerRelativeUrl('/Shared

Documents') Shared

Documents

库的根文件夹

_api/web/GetFolderByServerRelativeUrl('/Plans')/Files('a.txt')/$value Plans 库中的 a.txt 文件

默认情况下,以 AtomPub 格式(经过 OData 格式的扩展)的

XML 返回数据,但可通过向 HTTP 请求中添加以下可接受的报头来检索 JSON 格式的数据:

accept: application/json;odata=verbose

使用 JSON 还是 Atom (XML) 取决于您的技能范围、所使用的编