本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建由无服务器提供支持的通用 pub/sub API WebSockets
有些应用程序只需要简单 WebSocket 的 API,让客户端收听特定的频道或话题。没有特定形状或强类型要求的通用 JSON 数据可以以纯粹而简单的发布-订阅(发布/订阅)模式推送给收听其中一个频道的客户端。
通过Amazon AppSync 在 WebSocket API 后端和客户端自动生成 GraphQL 代码,可以在几分钟内实现简单的 pub/sub API,几乎不了解 GraphQL。
创建和配置发布订阅 API
要开始使用,请执行以下操作:
-
登录 Amazon Web Services Management Console并打开 AppSync 控制台
。 -
在 Dashboard (控制面板) 中,选择 Create API (创建 API)。
-
-
在下一个屏幕上,选择创建通用实时 API。
-
为你的发布/订阅 API 输入一个好记的名称。
-
选择 “创建”,然后等待几分钟。将在您的Amazon账户中创建一个新的预先配置的Amazon AppSync 发布/订阅 API。
API 使用内置Amazon AppSync的本地解析器(有关使用本地解析器的更多信息,请参阅Amazon AppSync 开发者指南中的教程:本地解析器)来管理多个临时发布/订阅频道和 WebSocket 连接,这些频道和连接会自动仅根据频道名称向订阅的客户端提供和筛选数据。API 调用使用 API 密钥进行授权。
部署 API 后,您将需要执行几个额外的步骤来生成客户端代码并将其与您的客户端应用程序集成。以如何快速集成客户端为例,本指南将使用一个简单的 React Web 应用程序。
-
首先在本地计算机上使用 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
-
在Amazon AppSync 控制台中,选择 JavaScript,然后选择 “下载”,下载包含 API 配置详细信息和生成的 GraphQL 操作代码的单个文件。
-
将下载的文件复制到 React 项目中的文件
/src
夹。 -
接下来,将现有样板
src/App.js
文件的内容替换为控制台中可用的示例客户端代码。 -
使用以下命令在本地启动应用程序:
$ npm start
-
要测试发送和接收实时数据,请打开两个浏览器窗口并访问
localhost: 3000
。示例应用程序配置为将通用 JSON 数据发送到名为 robots 的硬编码通道
。 -
在其中一个浏览器窗口中,在文本框中输入以下 JSON blob,然后单击 “提交”:
{ "robot":"r2d2", "planet": "tatooine" }
两个浏览器实例都订阅了机器人
频道并实时接收发布的数据,这些数据显示在 Web 应用程序的底部:

所有必要的 GraphQL API 代码,包括架构、解析器和操作,都将自动生成,以启用通用的发布/订阅用例。在后端,使用 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的实时功能。例如,您可以将现有的 CRUD 工作负载放在单独的 API 端点中,客户端从现有应用程序向通用 pub/sub API 发送和接收消息或事件,仅用于实时和发布/订阅目的。