Uso de resolvedores locais no AWS AppSync
O AWS AppSync permite que você use fontes de dados compatíveis (AWS Lambda, Amazon DynamoDB ou Amazon OpenSearch Service) para executar diversas operações. No entanto, em determinados cenários, uma chamada para uma fonte de dados compatível pode não ser necessária.
É aí que o resolvedor local se torna útil. Em vez de chamar uma fonte de dados remota, o resolvedor local apenas encaminhará o resultado do manipulador de solicitação para o manipulador de resposta. A resolução do campo não deixará o AWS AppSync.
Os resolvedores locais são úteis em uma infinidade de situações. O caso de uso mais popular é a publicação de notificações sem acionar uma chamada da fonte de dados. Para demonstrar esse caso de uso, vamos criar um aplicativo pub/sub no qual os usuários possam publicar e assinar mensagens. Esse exemplo utiliza Assinaturas, portanto se não estiver familiarizado com Assinaturas, siga o tutorial Dados em tempo real.
Criação do aplicativo pub/sub
Primeiro, crie uma API GraphQL em branco escolhendo a opção Design do zero e configurando os detalhes opcionais ao criar sua API GraphQL.
Em nosso aplicativo pub/sub, os clientes podem assinar e publicar mensagens. Cada mensagem publicada inclui um nome e dados. Adicione-o ao esquema:
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"]) }
Depois, vamos anexar um resolvedor ao campo Mutation.publish
. No painel Resolvedores próximo ao painel Esquema, encontre o tipo Mutation
, o campo publish(...): Channel
e clique em Anexar.
Crie uma fonte de dados Nenhum e nomeie-a como PageDataSource. Anexe-a ao seu resolvedor.
Adicione a implementação do seu resolvedor usando o seguinte trecho:
export function request(ctx) { return { payload: ctx.args }; } export function response(ctx) { return ctx.result; }
Certifique-se de criar o resolvedor e salvar as alterações feitas.
Enviar e assinar mensagens
Para que os clientes recebam mensagens, primeiro eles devem assinar uma caixa de entrada.
No painel Consultas, execute a assinatura SubscribeToData
:
subscription SubscribeToData { subscribe(name:"channel") { name data } }
O assinante receberá mensagens sempre que a mutação publish
for invocada, mas somente quando a mensagem for enviada para a assinatura channel
. Vamos tentar isso no painel Consultas. Enquanto sua assinatura ainda estiver em execução no console, abra outro console e execute a seguinte solicitação no painel Consultas:
nota
Estamos usando strings JSON válidas neste exemplo.
mutation PublishData { publish(data: "{\"msg\": \"hello world!\"}", name: "channel") { data name } }
O resultado será semelhante a este:
{ "data": { "publish": { "data": "{\"msg\":\"hello world!\"}", "name": "channel" } } }
Acabamos de demonstrar o uso de resolvedores locais, publicando uma mensagem e recebendo-a sem sair do serviço AWS AppSync.