在 AWS AppSync 中使用本地解析器
AWS AppSync 允许您使用支持的数据来源(AWS Lambda、Amazon DynamoDB 或 Amazon OpenSearch Service)执行各种操作。但在某些情况下,可能不必调用支持的数据来源。
这时本地解析器就很方便。本地解析器仅将请求处理程序结果转发到响应处理程序,而不会调用远程数据来源。字段解析是在 AWS AppSync 中完成的。
在很多情况下,本地解析器是非常有用的。最常用的使用案例是在不触发数据来源调用的情况下发布通知。为了说明该使用案例,让我们构建一个 pub/sub 应用程序,用户可以在其中发布和订阅消息。此示例利用了订阅,如果您不熟悉订阅,可以参考实时数据教程。
创建 pub/sub 应用程序
首先,创建一个空白的 GraphQL API,方法是选择从头开始设计选项,并在创建 GraphQL API 时配置可选的详细信息。
在我们的 pub/sub 应用程序中,客户端可以订阅和发布消息。每条发布的消息包含名称和数据。将以下内容添加到架构中:
type Channel { name: String! data: AWSJSON! } type Mutation { publish(name: String!, data: AWSJSON!): Channel } type Query { getChannel: Channel } type Subscription { subscribe(name: String!): Channel @aws_subscribe(mutations: ["publish"]) }
接下来,让我们将一个解析器附加到 Mutation.publish
字段。在架构窗格旁边的解析器窗格中,找到 Mutation
类型,找到 publish(...): Channel
字段,然后单击附加。
创建一个 None 数据来源,并将其命名为 PageDataSource。将其附加到您的解析器。
使用以下代码片段添加您的解析器实施:
export function request(ctx) { return { payload: ctx.args }; } export function response(ctx) { return ctx.result; }
确保您创建解析器并保存所做的更改。
发送和订阅消息
要让客户端接收消息,它们必须先订阅收件箱。
在查询窗格中,执行 SubscribeToData
订阅:
subscription SubscribeToData { subscribe(name:"channel") { name data } }
每次调用 publish
变更时,只有在消息发送到 channel
订阅时,订阅者才会收到消息。让我们在查询窗格中试一下。当您的订阅仍在控制台中运行时,打开另一个控制台,并在查询窗格中运行以下请求:
注意
我们在该示例中使用有效的 JSON 字符串。
mutation PublishData { publish(data: "{\"msg\": \"hello world!\"}", name: "channel") { data name } }
结果类似下面这样:
{ "data": { "publish": { "data": "{\"msg\":\"hello world!\"}", "name": "channel" } } }
我们刚刚说明了如何使用本地解析器,即,在不离开 AWS AppSync 服务的情况下发布和接收消息。