创建由无服务器 WebSockets 支持的通用 Pub/Sub API - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建由无服务器 WebSockets 支持的通用 Pub/Sub API

某些应用程序仅需要使用简单的 WebSocket API,客户端可以在其中侦听特定的通道或主题。对于没有特定形状或强类型要求的通用 JSON 数据,可以将其推送到使用纯粹且简单的发布-订阅 (Pub/Sub) 模式侦听这些通道之一的客户端。

可以使用 Amazon AppSync 在 API 后端和客户端自动生成 GraphQL 代码,在几分钟内即可实施简单的 Pub/Sub WebSocket API,几乎不需要了解任何 GraphQL 知识。

创建和配置 Pub-Sub API

首先,执行以下操作:

  1. 登录到 Amazon Web Services Management Console,然后打开 AppSync 控制台

    1. 控制面板中,选择创建 API

  2. 在下一个屏幕上,选择创建一个实时 API,然后选择下一步

  3. 输入您的 Pub/Sub API 的友好名称。

  4. 您可以启用私有 API 功能,但我们建议暂时关闭该功能。选择下一步

  5. 您可以选择使用 WebSockets 自动生成正常工作的 Pub/Sub API。我们建议暂时也关闭该功能。选择下一步

  6. 选择创建 API,然后等待几分钟。将在您的 Amazon 账户中创建一个新的预预置 Amazon AppSync Pub/Sub API。

该 API 使用 Amazon AppSync 的内置本地解析器(有关使用本地解析器的更多信息,请参阅《Amazon AppSync 开发人员指南》中的教程:本地解析器)管理多个临时 Pub/Sub 通道和 WebSocket 连接,这些连接自动向订阅的客户端传送数据,并仅根据通道名称进行筛选。API 调用通过 API 密钥进行授权。

在部署 API 后,您需要执行几个额外的步骤以生成客户端代码,并将其与客户端应用程序集成在一起。本指南使用一个简单的 React Web 应用程序,以提供如何快速集成客户端的示例。

  1. 首先,在本地计算机上使用 NPM 创建一个样板 React 应用程序:

    $ npx create-react-app mypubsub-app $ cd mypubsub-app
    注意

    该示例使用 Amplify 库将客户端连接到后端 API。不过,无需在本地创建 Amplify CLI 项目。虽然 React 是该示例中选择的客户端,但 Amplify 库还支持 iOS、Android 和 Flutter 客户端,并在这些不同的运行时环境中提供相同的功能。支持的 Amplify 客户端提供简单的抽象,只需编写几行代码,即可与 Amazon AppSync GraphQL API 后端进行交互,包括与 Amazon AppSync 实时 WebSocket 协议完全兼容的内置 WebSocket 功能:

    $ npm install @aws-amplify/api
  2. 在 Amazon AppSync 控制台中,选择 JavaScript,然后选择下载以下载一个包含 API 配置详细信息和生成的 GraphQL 操作代码的文件。

  3. 将下载的文件复制到 React 项目中的 /src 文件夹。

  4. 接下来,将现有的样板 src/App.js 文件内容替换为控制台中提供的示例客户端代码。

  5. 使用以下命令在本地启动该应用程序:

    $ npm start
  6. 要测试发送和接收实时数据的过程,请打开两个浏览器窗口并访问 localhost:3000。示例应用程序配置为将通用 JSON 数据发送到名为 robots 的硬编码通道。

  7. 在其中的一个浏览器窗口中,在文本框中输入以下 JSON Blob,然后单击提交

    { "robot":"r2d2", "planet": "tatooine" }

两个浏览器实例都订阅了 robots 通道并实时接收发布的数据(显示在 Web 应用程序底部):

Pub/Sub API 的示例 React 应用程序

将自动生成所需的所有 GraphQL API 代码(包括架构、解析器和操作)以实现通用的 Pub/Sub 使用案例。在后端,数据通过 GraphQL 变更发布到 Amazon AppSync 的实时终端节点,如下所示:

mutation PublishData { publish(data: "{\"msg\": \"hello world!\"}", name: "channel") { data name } }

订阅者通过相关的 GraphQL 订阅访问发送到特定临时通道的发布数据:

subscription SubscribeToData { subscribe(name:"channel") { name data } }

在现有应用程序中实施 Pub-Sub API

如果您只需在现有应用程序中实施实时功能,可以将这种通用的 Pub/Sub API 配置轻松集成到任何应用程序或 API 技术中。虽然使用单个 API 终端节点通过 GraphQL 在单个网络调用中安全地访问、处理和合并来自一个或多个数据源的数据具有优势,但无需转换现有的基于 REST 的应用程序或从头开始重建以利用 Amazon AppSync 的实时功能。例如,您可能在单独的 API 终端节点中具有现有的 CRUD 工作负载,其中客户端在现有应用程序和通用 Pub/Sub API 之间发送和接收消息或事件以仅实现实时和 Pub/Sub 目的。