使用 Bluemix 提供的 IoT 和 GPS 服务提高您的健康水平(2)
 
- UID
- 1066743
|

使用 Bluemix 提供的 IoT 和 GPS 服务提高您的健康水平(2)
Bluemix 服务绑定应用程序执行的有趣工作涉及到与它在 Bluemix 中使用的服务进行交互。下面我将带您简单地浏览一下如何从 Bluemix 应用程序连接到并使用服务 API。(该应用程序完成相关工作所用的代码基于 JavaScript,但概念适用于 Bluemix 内的所有运行时选项。)
您可以使用 cf 命令行工具辅助完成可以通过 Bluemix Web 界面执行的所有相同任务,包括创建和绑定到 Bluemix 目录中的服务。如果您使用了 IBM DevOps Services 基于 Web 的 IDE,那么许多相同的功能也可以直接从所提供的丰富 Web 界面访问。
由于 Wearable Fitness API 和 Pitney Bowes Travel Boundary Service API 需要 API 访问凭据,您必须首先注册那些外部系统来获取应用程序密钥。您的应用程序将使用密钥在运行时验证这些服务:
- 有关如何注册 Wearable Fitness API 服务的信息,参见 和有关从 Bluemix(不过通过 Ruby 运行时)使用 Wearable Fitness API 的这一篇 。
- 对于 Pitney Bowes Travel Boundary Service API,遵循 “ ” 中的前几个步骤获取注册的应用程序密钥。
如果您使用了 Bluemix Web 界面,一旦将 Wearable Fitness 服务和 Travel Boundary 服务添加到您的应用程序,Bluemix 就会引导您注册这些外部端点来实现 API 访问,并且插入产生的密钥详细信息,以便 Bluemix 在运行时将此信息提供给您:
访问服务凭据在 Bluemix 中创建一个应用程序之后,将其绑定到必要的服务,在运行时,您可以通过一个名为 VCAP_SERVICES 的环境变量轻松访问使用这些服务所需的详细信息。查看该变量当前内容的一种简单方式是,通过 Bluemix Web 仪表板查看您的应用程序的运行时状态页面。
从仪表板中单击您的应用程序图标,查看概述页面,然后单击左导航栏中的 Runtime 查看应用程序的所有细节。向下滚动到 Environment Variables 区域:
从您的 Node.js 应用程序很容易便可访问这些重要凭据,因为 VCAP_SERVICES 的格式已经存在于 JSON 中,而且包装在一个可轻松访问的环境变量中。这段代码显示为任何指定服务解析凭据的一个简单访问模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| //Bluemix hands us our service connection data in the VCAP_SERVICES variable
var envVCAP_SVC = JSON.parse(process.env.VCAP_SERVICES);
var wearableCredentials = getCredentials(envVCAP_SVC, "Wearable Fitness");
//Take the JSON environment variable contents and find the named service, returning
//the credentials JSON object
function getCredentials(vcapEnv, serviceNameStr) {
var credentials = undefined;
vcapEnv['user-provided'].forEach(function(service) {
if (service.name.indexOf(serviceNameStr) === 0) {
credentials = service.credentials;
}
});
return credentials;
}
|
请注意,通过使用这种懒方法,您可以指定服务名称的任何前缀。如果有多个服务始于相同的字符串,而且没有谨慎处理调用惯例,那么您可能无法获取回想要的凭据。因此,调用方一定要注意这种实现。但对于只有几个服务的简单示例,这种方法是一个合理选择。 |
|
|
|
|
|