在Heroku中使用Salesforce REST API

学习目标

完成本单元后,您将能够:

  • 了解使用Salesforce REST API的用例。
  • 了解不同类型的身份验证。
  • 了解如何在Heroku上使用Salesforce REST API和应用程序。

Salesforce REST API和Heroku

Salesforce REST API提供了一种通过简单的HTTP + JSON请求与Salesforce集成的简便方法。有一些REST API可以访问Salesforce上的几乎所有内容,因此您的自定义应用程序可以对Salesforce中的数据,流程和元数据执行任何操作。REST API使用OAuth进行身份验证,这是处理REST身份验证的标准方法。

该图显示了通过REST接口将Salesforce中的对象与Heroku之间的连接

虽然REST API可以直接使用,但API周围有许多包装器库,使它们易于在 Node.js, Python, Ruby,Java等中使用。包装器库处理低级任务,例如身份验证和请求和响应处理。因此,而不是手动构建HTTP请求(以Node.js为例):

var query = 'SELECT name Account'; var url = 'https://na1.salesforce.com/services/data/v20.0/query/?q=' + encodeURIComponent(query); request.get(url, { 'auth': { 'bearer': 'bearerToken' } }); 

您可以使用Node.js 的开源 nforce库,只需执行以下操作:

org.query({ query: 'SELECT name FROM Account' }); 

最终,nforce库在幕后做了同样的事情,但是库使API更容易使用。

您可以在Salesforce REST API之上构建应用程序到应用程序集成和自定义用户界面。最大的区别在于如何处理身份验证。通过app-to-app集成,应用程序可以识别单个集成用户,并且所有对REST API的调用都是以该用户身份完成的。使用自定义用户界面,用户不会直接使用自定义应用进行身份验证。相反,用户会遍历OAuth流程以授权自定义应用代表其进行API调用。REST API的每个请求都代表使用自定义用户界面的指定用户完成。

应用程序到应用程序集成的一个用例是转换,整理,然后复制或代理另一个系统的数据。例如,在Heroku上运行的面向客户的订单管理应用程序需要从Salesforce获取客户信息。此设置可以使用单个集成用户从Salesforce获取所有必需的信息。

但是,如果订单管理应用程序用于通过Salesforce登录的后台,则该应用程序是一个自定义用户界面,它使用OAuth允许订单管理应用程序代表指定用户发出API请求。在这种情况下,了解哪个命名用户正在进行每个REST调用对于安全性和审计非常重要。

使用Heroku,可以轻松部署任何类型的应用程序并利用OAuth和Salesforce REST API。

您可以直接进入 Salesforce REST API文档,以便在方便时学习低级API。要快速入门,包括部署到Heroku和使用REST API的基本应用程序,请查看 Quick Force Node(JavaScript)或 Quick Force Java。

使用OAuth进行REST API身份验证

身份验证是使用REST API的一个关键方面,因为对API的每个请求都必须包含身份验证令牌或密钥。无论是使用应用程序到应用程序集成还是自定义用户界面,您的应用程序都需要Salesforce中的 连接应用程序,以允许Salesforce识别发出请求的应用程序,并使组织管理员能够管理对API的访问。

单个用户

通过应用程序到应用程序的集成,应用程序需要知道单个集成用户的凭据。然后可以调用REST API以使用凭据登录,凭据返回身份验证令牌。

命名用户

构建自定义用户界面时,应用程序永远不会收到实际凭据。相反,OAuth流程为应用程序提供了获取授权令牌的代码。由于用户手动授权应用程序访问Salesforce,因此流程遵循以下步骤。

  1. 用户尝试访问需要身份验证的页面。
  2. Heroku上的应用程序将用户重定向到Salesforce OAuth页面。
  3. 如果先前未授权该应用程序,则会提示用户。
将显示“允许访问”对话框的屏幕截图,询问Workbench是否已获得授权
  1. 授权后,Salesforce会使用代码将用户重定向回应用程序。
  2. 应用程序使用代码检索访问令牌和刷新令牌。
  3. 应用程序使用访问令牌对Salesforce进行REST API调用。

通常,访问和刷新令牌被加密并以某种形式的会话状态或数据库存储,以便用户不必继续通过每个请求的授权流程。

请记住,这些令牌是敏感的,必须以极端的安全勤勉处理!