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

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

创建由无服务器提供支持的通用发布/订阅 API WebSockets

有些应用程序只需要简单 WebSocket 客户端监听特定频道或话题的 API。没有特定形状或强类型要求的通用 JSON 数据可以以纯粹而简单的发布-订阅 (pub/sub) 模式推送给监听其中一个频道的客户端。

使用Amazon AppSync 实现简单的发布/订阅 WebSocket 通过在 API 后端和客户端自动生成 GraphQL 代码,在几分钟内几乎不了解 GraphQL 的 API。

创建和配置 pub-sub API

要开始使用,请执行以下操作:

  1. 登录 Amazon Web Services Management Console并打开 AppSync 控制台

    1. Dashboard (控制面板) 中,选择 Create API (创建 API)

  2. 在下一个屏幕上,选择创建通用实时 API.

  3. 为您的 pub/sub Sub API 输入易记名称。

  4. 选择Create然后等待几分钟。全新预配置Amazon AppSync pub/sub API 将在你的Amazonaccount.

API 使用Amazon AppSync的内置本地解析器(有关使用本地解析器的更多信息,请参阅教程:本地解析程序中的Amazon AppSync 开发人员指南) 管理多个临时发布/订阅频道以及 WebSocket connections,它仅根据频道名称自动向订阅的客户端传送和过滤数据。API 调用使用 API 密钥进行授权。

部署 API 后,您将看到几个额外的步骤来生成客户端代码并将其与您的客户端应用程序集成。有关如何快速集成客户端的示例,本指南将使用一个简单的 React Web 应用程序。

  1. 首先使用以下命令创建样板 React 应用程序NPM在本地计算机上:

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

    此示例使用Amplify 库将客户端连接到后端 API。但是,无需在本地创建 Amplify CLI 项目。虽然在本示例中,React 是首选客户端,但 Amplify 库还支持 iOS、Android 和 Flutter 客户端,在这些不同的运行时提供相同的功能。支持的 Amplify 客户端提供简单的抽象元素供您交互Amazon AppSync GraphQL API 后端包含几行代码,包括内置代码 WebSocket功能完全兼容Amazon AppSync 实时 WebSocket protocol

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

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

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

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

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

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

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

两个浏览器实例都订阅了机器人引导并实时接收已发布的数据,显示在 Web 应用程序的底部:


                    发布/订阅 API 的 React 应用程序示例

所有必要的 GraphQL API 代码,包括架构、解析器和操作,都是自动生成的,以启用通用的发布/订阅用例。在后端,数据发布到Amazon AppSync的实时端点具有 GraphQL 变异,如下所示:

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

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

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

在现有应用程序中实现 pub-sub API

如果您只需要在现有应用程序中实现实时功能,则此通用发布/订阅 API 配置可以轻松集成到任何应用程序或 API 技术中。虽然在使用 GraphQL 的单个网络调用中使用单个 API 端点安全地访问、操作和合并来自一个或多个数据源的数据有好处,但无需为了利用 REST 而从头开始转换或重建现有的基于 REST 的应用程序Amazon AppSync的实时功能。例如,您可以在单独的 API 端点中使用现有 CRUD 工作负载,客户端将消息或事件从现有应用程序发送和接收到通用 pub/sub API,仅用于实时和发布/订阅目的。