内容


在 IBM Cloud Functions 平台上的调用操作

您已将代码从 developerWorks 沙箱部署到 IBM Cloud。现在该做什么?

Comments

交互式代码: 如果在样例代码顶部看到 运行,则表明您可以运行该代码,检查运行结果,编辑和修改代码并再次运行。 如果看到 部署,则表明您可以将该代码部署到 developerWorks IBM Cloud 帐户中。

本文将展示在通过 developerWorks 沙箱将代码部署到 IBM® Cloud 后,在 IBM® Cloud Functions 环境下访问操作的 4 种方法。 IBM Cloud Functions 在 OpenWhisk 之上运行,所以我们先了解一下 OpenWhisk 的基础知识,以及如何使用新部署的代码。

OpenWhisk 基础知识

OpenWhisk 是一个开源无服务器计算平台。无服务器计算背后的主要理念是,如果建立一个虚拟机只是为了托管一小段偶尔调用的代码,那就是一种资源浪费。首先,这会浪费资金,因为尽管虚拟机大部分时间都是空闲的,但您仍需付费使其 24/7 正常运行。这还会浪费时间,因为您需要花时间维护在该虚拟机中运行的软件。您需要为操作系统打补丁,需要为基础架构打补丁,还需要为语言运行时打补丁。最后,如果您的代码执行某项重要操作,您需要使其具有容错性和可扩展性,随着基于服务器的架构变得更大、更复杂,这会产生更多成本。

无服务器计算应运而生。借助 OpenWhisk,不需要创建服务器来运行代码,您可以将代码提供给系统并定义该代码应在哪些条件(用 OpenWhisk 的话说是触发器和规则)下运行。当其中一个条件发生时,OpenWhisk 运行时就会运行您的代码。您仅需按调用付费,而不是按小时付费。如果只是偶尔调用您的代码,那么无服务器计算就会便宜得多。此外,任何必要的基础架构维护都由 IBM Cloud 团队完成。这就是 IBM Cloud OpenWhisk 环境的美妙之处。

OpenWhisk 概念

OpenWhisk 环境基于多种类型的资源。尽管操作是本文中将会使用的唯一一种类型,但理解以下概念很重要:

  • 操作:操作是执行的代码。它通常执行某个短暂的任务,然后终止,代码进入休眠状态。一个操作采用一个 JSON 对象作为其输入,并返回一个 JSON 对象作为其输出。同样地,您部署在 developerWorks 沙箱中的代码是一个 OpenWhisk 操作。
  • 触发器:触发器是与一类事件有关联的名称。用户可以直接触发一个触发器或通过 OpenWhisk 环境触发一个触发器来响应来自某个提要的事件。下面讲讲提要……
  • 提要:提要将外部事件源(位于 OpenWhisk 环境外部的某个事物)连接到 OpenWhisk 触发器。例如,可以创建一个 Cloudant 数据库更改提要,然后将该提要和一个触发器捆绑在一起。这会导致每次数据库发生更改时都会触发该触发器。
  • 规则:规则将触发器和操作捆绑在一起。当触发器触发时,一个规则会确定随后应调用哪些操作。可以定义一个规则来调用多个操作,也可以让多个规则调用同一个操作。

下图演示了这 4 个概念之间的关系。

OpenWhisk 架构

OpenWhisk 架构

以上就是 OpenWhisk 的基本工作原理。如果想掌握我们介绍的基本知识,了解这些概念至关重要。尽管如此,我们在这里仅会直接调用 OpenWhisk 操作。我们不会使用提要、触发器或规则,只是简单地调用我们的操作。(IBM Cloud 文档很好地概述了 IBM Cloud Functions 平台和它的工作原理。)

我们的样本操作

本文将要使用的样本操作是一个简单的 Hello World 操作。该代码接受一个包含 name 的 JSON 对象,并返回另一个包含个性化的 greeting 的 JSON 对象。

首先,单击下面的 Deploy 按钮来部署此代码:

显示结果

沙箱返回的 URL 是 OpenWhisk 操作的地址。 如果愿意的话,可将它复制到剪贴板;我们将在整篇文章中使用该地址。(备注:生成的 URL 对您是唯一的,所以您看到的 URL 会与此处示例中的有所不同。)

我们将介绍 4 种调用操作的技术:

  • 使用基于浏览器的 HTTP 工具
  • 使用 curl 命令行工具
  • 在 node.js 应用程序内使用 npm request
  • 在 Java 应用程序内使用 HttpURLConnection

方法 1:使用基于浏览器的 HTTP 工具

我们将使用的第一种技术是利用基于浏览器的工具(比如 Advanced REST Client for Chrome)调用 OpenWhisk 操作。还有适用于其他浏览器的类似工具。无论采用哪种工具,都需要知道或指定 4 项基本信息:

  • OpenWhisk 操作的 URL - 这是来自上面的沙箱的 URL。
  • HTTP 提交方式必须为 POST
  • HTTP 标头中请求 的 Content-Type 的值为 application/json
  • JSON 对象内的 name 值。

首先,将来自 developerWorks 沙箱的 URL 粘贴到 URL 字段中:

粘贴 URL

粘贴 URL

接下来,确保选中了 POST 单选按钮,然后单击第二个下拉菜单。从菜单中选择 application/json

这是一个内容类型为 application/json 的 POST 请求

这是一个内容类型为 application/json 的 POST 请求

接下来要做的事情是,在内容中填入 name 字段。该内容是一个 JSON 字符串,所以请确保您的语法是正确的。

发送到该服务的内容和发送它的按钮

发送到该服务的内容和发送它的按钮

填入所有细节后,单击 SEND 按钮。您会看到类似下图的结果:

OpenWhisk 操作返回的数据

OpenWhisk 操作返回的数据

在这个简单化的示例中,OpenWhisk 操作返回一句简单问候。作为留给读者的练习,可尝试部署一个更复杂的样本,比如文章使用 Watson Language Translator 服务翻译自然语言中演示的样本。(请注意,使用 Language Translator 服务要求您定义 IBM Cloud 帐户中的凭证。还需要创建一个更复杂的 JSON 对象。请参阅该文了解完整细节。)

方法 2:使用 curl 命令行工具

curl 命令行工具是一种与网络资源交互的常见方法。就像 Advanced REST Client 一样,我们需要定义各种属性和参数。所有这些操作都是在命令行上完成的。同样,它们包括:

  • OpenWhisk 操作的 URL - 在部署代码时从 developerWorks 沙箱获得。
  • HTTP 提交方式必须为 POST。
  • 请求需要一个包含值为 application/jsonContent-Type HTTP 标头。
  • JSON 对象内的 name 值。

鉴于上一个示例的服务,curl 命令类似于:

curl [the URL from the sandbox] -X POST -H "Content-Type: application/json" -d '{"name": "Susan"}'

-X POST 指定这是一个 HTTP POST 操作,-H(标头)标志定义了 Content-Type 标头,-d(数据)标志包含传递给操作的信息。系统将 JSON 结构返回到命令行。(如果希望将输出写入一个文件,可以添加 -o 选项并指定一个文件名。)

方法 3:在 node.js 应用程序内使用 npm request

我们将考虑的下一种方法是,使用 npm request 包来调用应用程序中的操作。通过调用应用程序中的操作,可以将 OpenWhisk 操作用作微服务。 (Martin Fowler 的博客上有一篇对无服务器计算的精彩介绍简要讨论了微服务。)

这是一个调用本文中引用的 OpenWhisk 操作的简短 node 应用程序:将 [URL] 替换为部署的 Hello World 代码的 URL。单击 Run 按钮运行该代码:

显示结果

options 对象包含 OpenWhisk 操作的 URL、输入数据 (body),它设置 Content-Type 标头,并告诉 request 对象发送给操作的数据是 JSON。

定义了选项和回调函数后,我们使用 request.post 通过合适的数据和标头将数据发送到 OpenWhisk 操作。 运行这个 node 应用程序会生成以下结果:

Hello, Susan!

调用 console.log() 会输出 OpenWhisk 操作返回的 JSON 对象中的 greeting 字段。对于许多操作,需要检查一个更复杂的 JSON 对象来查找需要的数据,但我们在这里使它保持简洁。

方法 4:在 Java 应用程序内使用 HttpURLConnection

我们要考虑的下一种方法是在 Java 应用程序内使用 HttpURLConnection 类。您会看到,这需要在所有其他调用该操作的方法中使用的相同信息,只是它们是使用不同语法定义和指定的。与 node.js 版本一样,将 [URL] 替换为 OpenWhisk 操作的 URL,单击 Run 按钮运行下面的 Java 应用程序:

显示结果

此代码生成这些结果:

{
  "greeting": "Hello, Susan"
}

结束语

我们介绍了 IBM Cloud Functions 平台调用操作的 4 种不同方法。尽管这些示例使用了通过 developerWorks 沙箱部署的操作,但这些技术适用于任何操作,无论它是如何部署的。如果使用 IBM Cloud 控制台将操作部署到您自己的帐户,可以使用非常有用的 wsk 命令行工具调用、管理和监视您定义的任何 OpenWhisk 资源,包括操作、触发器和规则。

我们鼓励您通过在自己的 IBM Cloud 帐户中使用操作来拓展您的 IBM Cloud Functions 知识。文章使用 IBM Cloud 和 Node.js 构建面向用户的 OpenWhisk 应用程序是一个不错的起点。也可以访问 OpenWhisk 开发人员中心获取更多通用资源。尽情享受无服务器计算的强大功能和灵活性吧!


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Web development
ArticleID=1048765
ArticleTitle=在 IBM Cloud Functions 平台上的调用操作
publish-date=02272018