在 SharePoint 中选择合适的 API 集
了解 SharePoint 提供的几组 API,包括服务器对象模型、各种客户端对象模型和 REST/OData Web 服务。
决定使用哪个 API 集的因素
您可以在多个 API 集中选择一个来访问 SharePoint 平台。 您使用哪一个 API 集取决于以下因素:
- 应用程序的类型。 这些可能性包括但不限于以下非互斥类别:SharePoint 外接程序、SharePoint 页面上的 Web 部件、在客户端计算机或客户端移动设备上运行的 Silverlight 应用程序、由 IFrame 在 SharePoint 中公开的 ASP.NET 应用程序、在 SharePoint 网站页中运行的 JavaScript、 SharePoint 应用程序页、在客户端计算机上运行的 Microsoft .NET Framework 应用程序、Windows PowerShell脚本,以及 SharePoint 服务器上运行的计时器作业。
- 你现有的技能。 令人惊讶的是,你可以在 SharePoint 中创建应用程序,而无需了解有关 SharePoint 编程的知识。 如果你已经具有以下任何编程模型的经验,则可以直接进入 SharePoint 开发:
- JavaScript
- ASP.NET
- REST/OData
- .NET Framework
- Windows Phone
- Silverlight
- Windows PowerShell
- 运行代码的设备。 可能的设备包括 SharePoint 场中的服务器,外部服务器(如,云、客户端计算机和移动设备中的服务器)。 此主题提供了由 SharePoint 提供的各种 API 集的概览。 图 1 演示了可以使用哪一个 API 集来对应开发 13 个常规的与 SharePoint 相关的应用程序。 对于许多应用程序而言,您可以从多个 API 中进行选择。
图 1. 所选 SharePoint 扩展类型和 SharePoint API 集
下表提供了有关哪个程序集可用于 SharePoint 扩展项目的所选列表的指南。 此主题的剩余部分介绍了各种 API 集。
如果您想进行此操作 ... | ... 请使用这些 API |
---|---|
创建一个跨 SharePoint 数据或外部数据(以 ASP.NET 外部内容类型呈现在 SharePoint 中)的防火墙执行创建/读取/更新/删除 (CRUD) 操作的 Microsoft Business Connectivity Services (BCS) Web 应用程序。 | JavaScript 客户端对象模型 |
创建一个 ASP.NET Web 应用程序,它可以针对 SharePoint 数据或外部数据(以 BCS 外部内容类型呈现在 SharePoint 中)执行 CRUD 操作,但不必跨防火墙调用 SharePoint | .NET Framework 客户端对象模型、Silverlight 客户端对象模型或 REST/OData 端点 |
创建一个针对 SharePoint 数据或外部数据(以 BCS 外部内容类型呈现在 SharePoint 中)执行 (CRUD) 操作的 LAMP Web 客户端对象模型和 SharePoint REST/OData 端点的比较应用程序。 | REST/OData 端点 |
创建一个针对 SharePoint 数据执行 CRUD 操作的 Windows Phone 应用程序 | 移动设备客户端对象模型 |
创建一个使用 Microsoft Push Notification Service 警告 SharePoint 中的事件的移动设备的 Windows Phone 应用程序 | 移动设备客户端对象模型和服务器对象模型 |
创建一个针对 SharePoint 数据执行 CRUD 操作的 iOS 或 Android 应用程序 | REST/OData 终结点 |
创建一个针对 SharePoint 数据执行 CRUD 操作的 .NET Framework 应用程序 | .NET Framework 客户端对象模型 |
创建一个针对 SharePoint 数据执行 CRUD 操作的 Silverlight 应用程序 | Silverlight 客户端对象模型 |
创建一个针对 SharePoint 数据执行 CRUD 操作的 HTML/JavaScript 应用程序 | JavaScript 客户端对象模型 |
创建一个使用 SharePoint 的 Office 外接程序 | JavaScript 客户端对象模型 |
创建一个自定义 Windows PowerShell 命令 | 服务器对象模型 |
创建一个计时器作业 | 服务器对象模型 |
创建一个扩展的中央管理 | 服务器对象模型 |
在整个 SharePoint 场中创建一致性品牌。 | 服务器对象模型 |
创建自定义 Web 部件、应用程序页或 ASP.NET 用户控件 | 服务器对象模型 重要说明:如果要向客户提供的功能的目标范围不超过 SharePoint 网站集管理,建议根据需要使用自定义 Web 部件和用户控件创建包括远程 ASP.NET Web 应用程序的 SharePoint 外接程序,而不要使用服务器对象模型。 请参阅此表的前两行。 |
服务器对象模型
最大的 API 集在托管类的服务器对象模型中。 在 SharePoint Foundation 2013 级别,此对象模型包括了启用基本网站的编程控件和 SharePoint Foundation 的列表结构的类和成员。 这些类中的大多数都位于 Microsoft.SharePoint 命名空间中。 此外,可以使用服务器对象模型(包括工作流、警报、Web 部件、基本搜索和 Microsoft 业务连接 服务 (BCS) )来扩展几乎每个 SharePoint Foundation 组件。 该服务器对象模型还包括丰富的启用管理的扩展和 SharePoint Foundation 的安全系统的 API 集,包括备份、场运行状况和诊断、登录、场和 Web 应用程序管理、升级、部署、缓冲和 Windows PowerShell 自定义。
在 SharePoint 一级添加了更多类,可方便编程实现企业内容管理 (ECM)、用户配置文件、分类、高级搜索和其他 SharePoint 功能。
可以使用 LINQ to Objects 查询内存中的任何 IEnumerable 集合,但 LINQ to SharePoint 提供程序 允许直接查询 SharePoint 内容数据库中的列表。 严格地说,此提供程序不适用于本主题中讨论的任何其他 API 集;但是,在大多数其他方法中,都有使用 LINQ 语法的方法。
安装 SharePoint 时,将定义内置服务器端类的程序集安装到每个服务器的全球程序集缓冲。 当您针对服务器对象模型进行编程时,将您的程序集作为 服务器场解决方案 安装到全球程序集缓冲。
注意
对 SharePoint 开发新的沙盒解决方案已遭弃用,取而代之是开发 SharePoint 加载项,但仍可将沙盒解决方案安装到 SharePoint 网站集。 这些解决方案的程序集仍保留在包中,实际使用时除外,此时程序集被临时安装到服务器上的文件夹中。 有关详细信息,请参阅 沙盒解决方案中的程序集在何处部署?。
有关何时可以使用服务器对象模型的限制
SharePoint 外接程序中的自定义逻辑始终“向下”分发到客户端,或“向上”分发到云 (或“超过”到 SharePoint 场) 外的某个服务器。 在所有这些分发模型中,必须使用其中一个客户端对象模型或 REST/OData 端点。 (不能在 SharePoint 外接程序中使用服务器对象模型) 例如,如果应用程序包含 SharePoint 托管的页面,则这些页面可以使用 JavaScript 客户端对象模型访问 SharePoint 数据。 此类页面还可能公开使用 SharePoint Silverlight 客户端对象模型的 Silverlight 应用程序。 有关 SharePoint 外接程序的详细信息,请参阅 SharePoint 外接程序体系结构和开发环境的重要方面。
托管代码的客户端对象模型
SharePoint 具有三个托管代码的客户端对象模型: .NET、Silverlight 和 移动设备。
.NET 客户端对象模型
.NET Framework 的 SharePoint 客户端模型用于在非电话式 Windows 客户端上运行的 .NET Framework 应用程序。 以下任何一个都算作此类客户端:
- 用户的计算机
- SharePoint 场外的服务器
- Microsoft Azure 上的 Web 角色或辅助角色
在核心网站和列表服务器对象模型中,几乎所有类都在 .NET Framework 客户端对象模型中有一个对应的类。 此外,.NET Framework 客户端对象模型还公开了一整套用于扩展其他功能的 API,包括一些 SharePoint 功能,如 ECM、分类、用户配置文件、高级搜索、分析、BCS 等。
为了提高性能,在 .NET Framework 客户端对象模型中编写的代码行将分批发送到 SharePoint 服务器,并在其中转换为服务器端代码并执行。 然后,查询的结果以及所有变量的新状态将返回到客户端。 开发人员可以确定批处理是同步运行还是异步运行。 (在同步批处理中,.NET Framework应用程序在继续之前等待服务器返回的结果;在异步批处理中,客户端处理会立即继续,客户端用户界面 (UI) 保持响应。)
您可以使用客户端代码中的 LINQ 查询语法来查询任何 IEnumerable 对象,包括实现 IEnumerable 的SharePoint 对象。 但是,执行此操作时,使用的是 LINQ to Objects,而不是 LINQ to SharePoint 提供程序,因此后者的文档与客户端代码无关。
必须将 .NET Framework 客户端对象模型的程序集安装在客户端上。 它们包含在可以在 SharePoint 客户端组件上获取的重新分发包中。
有关使用 .NET Framework 对象模型的示例,请参阅使用 SharePoint 客户端库代码完成基本操作。
注意
也可以在 .NET Framework 应用中使用 SharePoint REST/OData 终结点。 有关.NET Framework客户端对象模型与 SharePoint REST/OData 终结点的比较,请参阅本文后面的 REST/OData 终结点部分。
Silverlight 客户端对象模型
Silverlight 的 SharePoint 对象模型用于 Silverlight 应用程序,不管已编译的 .xap 文件在何处是持久的。 它可能在 SharePoint 网站的附件库、客户端计算机、云存储器或外部服务器。 通常,Silverlight 应用程序显示在 SharePoint 中的 SilverlightWebPart 对象中。 SharePoint 中的 Silverlight 客户端对象模型几乎等同于 .NET Framework 客户端模型,它包括对相同的扩展区域的支持。 主要的差异在于,在 Silverlight 版本中,所有批处理命令将被异步发送到服务器,所以该应用程序的 UI 保持活动。
Silverlight 客户端对象模型的程序集保存在每个 SharePoint 服务器上的 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\LAYOUTS\ClientBin。 不必将它们安装到正在运行 Silverlight 应用程序的计算机上(即使您可以选择进行此操作)。 您还可以将它们打包到该应用程序的 .xap 文件。
Silverlight .xap 文件可以包含在 SharePoint 外接程序中,包括 SharePoint 托管的应用程序。 在后一种情况中,将 .xap 文件部署到“应用程序 Web” 的库中。 (有关应用程序 Web 的详细信息,请参阅 SharePoint 中的主机 Web、外接程序 Web 和 SharePoint 组件。) 这使 Silverlight 应用程序成为在应用程序中包括自定义 SharePoint 代码的有用方法,因为 SharePoint 外接程序中不允许使用自定义服务器端代码。它还使 Silverlight 开发人员能够使用其现有技能以最少的学习曲线创建 SharePoint 应用程序。
注意
也可以在 Silverlight 应用中使用 SharePoint REST/OData 终结点。 有关 Silverlight 客户端对象模型与 SharePoint REST/OData 终结点的比较,请参阅本文后面的 REST/OData 终结点 部分。
移动对象模型
Silverlight 客户端对象模型的一个专用版本可用于 Windows Phone 设备。 它包括一些只和移动电话相关的附加 API,如使电话应用程序可以注册来自 Microsoft Push Notification Service 的通知的 API。 它支持所有核心 SharePoint 功能;但是,它不针对托管代码的其他两个客户端对象模型支持的非核心扩展区域提供支持。 若要访问这些附加区域,请使用您的移动设备应用程序中的 SharePoint REST/OData 端点。 请参阅此章的 REST/OData 端点一节。
移动对象模型的程序集保存在每个 SharePoint 服务器上的 %ProgramFiles%\Common Files\Microsoft Shared\Web server extensions\15\TEMPLATE\LAYOUTS\ClientBin。 您可以将它们打包到 Windows Phone 应用程序的 .xap 文件。
JavaScript 对象模型
SharePoint 提供了用于内联脚本或各个 .js 文件的 JavaScript 对象模型。 它包括与 .NET Framework 和 Silverlight 客户端对象模型一样的所有功能。 与 Silverlight 客户端对象模型一样,JavaScript 对象模型是一种在应用中包括自定义 SharePoint 代码的有用方法,因为 SharePoint 外接程序中不允许使用自定义服务器端代码。它还使 Web 开发人员能够使用其现有 JavaScript 技能创建具有最小学习曲线的 SharePoint 应用程序。
就像托管代码客户端对象模型一样,SharePoint 的 JavaScript 基础结构与批处理中的场服务器相交互。 这些批处理总是异步运行。 此外,现在可以跨 JavaScript 中的域访问 SharePoint 数据(但是仅限于相同父级站点内的数据),这在 SharePoint 的上一个版本中是不允许的。 有关详细信息,请参阅使用跨域库从加载项访问 SharePoint 数据。 数据是由 JavaScript 对象表示法 (JSON) 的服务器中返回。
JavaScript 对象模型在位于每个服务器上的 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\LAYOUTS 的一组 *.js 文件中定义。
有关使用 .NET Framework 对象模型的示例,请参阅在 SharePoint 中使用 JavaScript 库代码完成基本操作。
注意
也可以在 JavaScript 应用中使用 SharePoint REST/OData 终结点。 有关 JavaScript 客户端对象模型与 SharePoint 的 REST/OData 终结点的比较,请参阅以下部分 REST/OData 终结点。
REST/OData 端点
对于需要从不使用 JavaScript 且不基于 .NET Framework 或 Silverlight 平台构建的客户端技术访问 SharePoint 实体的方案,SharePoint 提供了使用 OData 协议对 SharePoint 列表数据执行 CRUD 操作的代表性状态传输 (REST) Web 服务的实现。 此外,客户端对象模型中的几乎每个 API 都具有一个相应的 REST 端点。 这使您的代码可以通过使用任何支持标准 HTTP 请求和响应的技术与 SharePoint 项目相交互。 若要使用为 SharePoint 生成的 REST 功能,您的代码可以构造一个 RESTful HTTP 请求到与所需客户端对象模型 API 相对应的端点。 Client.svc Web 服务处理了 HTTP 请求,并为 Atom 或 JSON 格式的响应提供服务。
有关使用 REST/OData Web 服务的详细信息,请参阅 在 SharePoint REST 请求中使用 OData 查询操作节点;有关示例,请参阅主题 使用 SharePoint REST 终结点完成基本操作。
比较 REST/OData 编程和客户端对象模型编程
在有些情况下,在可用 SharePoint 对象模型的应用程序中最好使用 REST 端点,特别是对于没有 Windows 开发经验的开发人员而言。 下表提供了对于 在 Windows 平台或支持 JavaScript 的平台上创建应用程序的开发人员而言,这些编程选择的主要功能的比较。
功能 | .NET Framework 或 Silverlight 对象模型 | JavaScript 对象模型 | 从 Windows 平台或 JavaScript 中调用的 REST/OData 端点 |
---|---|---|---|
面向对象的编程 | 是 | 是 | 否 |
批处理 | 是 | 是 | 是 |
针对有条件处理和异常处理的 API | 是 | 否 | 否 |
LINQ 语法的可用性 | 是 | 否 | 否 |
合并不同 SharePoint Web 应用程序中的列表数据 | 是 | 否 | 是 |
针对有经验的 REST/OData 开发人员的便利性 | 否 | 否 | 是 |
与 非 Windows 编程或 JavaScript 编程的相似性 | 否 | 是 | 是 |
列表项字段的强输入 | 否(除了 LINQ) | 否 | 是(从 Windows 平台调用);否(从 JavaScript 中调用) |
探查器 jQuery、Knockout 和其他 JavaScript 库 | 否 | 是 | 否(从 Windows 平台调用);是(从 JavaScript 中调用) |
WCF 数据服务框架
如果希望在 .NET Framework 或 Silverlight 客户端应用程序中使用 LINQ 语法,SharePoint 支持将 WCF Data Services 作为 LINQ 提供程序。 您可以将 SharePoint Foundation 的上一个版本中的 listdata.svc(仅限于列表数据)作为目标,您也可以将与支持 OData 接口访问除了列表数据的所有 SharePoint 实体相同的 client.svc 作为目标。 有关详细信息,请参阅 使用 ADO.NET 数据服务查询 SharePoint Foundation 。
图 2 说明了各种客户端 API、各种类型的客户端应用程序和 SharePoint 的关系。 各种 _api
URL 是 REST 终结点的相对于场的 URL。 有关详细信息,请参阅了解更多 SharePoint 15 REST 服务。
图 2. SharePoint 中的客户端应用程序和 API
被弃用的 API 集
SharePoint 框架中仍支持两个 API 集以实现向后兼容性,但建议不要将它们用于新项目: ASP.NET (asmx) Web 服务,以及 将远程过程调用 (RPC) 调用owssvr.dll 文件。