Como notifico os assinantes do AWS AppSync sobre atualizações externas do banco de dados que as mutações no lado do cliente não realizam?

7 minuto de leitura
0

Preciso que os clientes da minha aplicação sejam atualizadas em tempo real quando são feitas alterações externas no banco de dados que não são realizadas por meio de mutações no lado do cliente. Como usar o AWS AppSync para notificar os assinantes sobre essas alterações?

Breve descrição

Use resolvedores locais para notificar os assinantes sobre alterações no banco de dados externo em tempo real, sem fazer uma chamada à fonte de dados. Por exemplo, resolvedores locais são úteis para aplicações que atualizam informações regularmente, como uma aplicação de companhia aérea.

Conclua as etapas na seção Resolução para criar um exemplo de API GraphQL. A API GraphQL atualiza os assinantes em tempo real quando os dados são gravados em uma fonte de dados de tabela do Amazon DynamoDB.

Resolução

Criar uma API GraphQL usando o assistente

Use o assistente de esquema guiado do AWS AppSync para criar uma nova API GraphQL. Para mais informações, consulte Projetar uma API GraphQL.

1.    Abra o console do AWS AppSync.

2.    Escolha Criar API.

3.    Na página Primeiros passos, em Personalizar sua API ou importar do Amazon DynamoDB, escolha Criar com assistente e, em seguida, escolha Iniciar.

4.    Na página Criar um modelo:
Em Nomear o modelo, insira um nome para seu modelo. Neste exemplo, Book é o nome.
Em Configurar os campos do modelo, defina os tipos de dados para sua aplicação. Para esse exemplo de configuração, mantenha os nomes (id e title) e tipos de campo padrão.
(Opcional) Expanda Configure a tabela de modelos (opcional) para adicionar um índice.
Escolha Criar.

5.    Na página Criar recursos, insira um nome para sua API. Selecione Criar. O AWS AppSync cria sua API e abre a página de Consultas da sua API.

Criar uma assinatura de teste

1.    Abra o console do AWS AppSync.

2.    Navegue até a página Consultas da sua API e, em seguida, abra uma guia ou janela duplicada do navegador.

3.    Na guia ou janela duplicada do navegador, limpe o conteúdo do editor de consultas e insira a seguinte consulta:

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

A consulta anterior cria uma assinatura para as mutações de createBook.

4.    Escolha o botão de reprodução (Executar consulta). A guia ou janela duplicada do navegador está inscrita em mutações de createBook.

5.    Na guia ou janela original do navegador, escolha o botão de reprodução (Executar consulta) e depois escolha createBook para executar a mutação. Os resultados aparecem nas guias ou janelas do navegador original e duplicado (assinatura).

6.    Depois de ver a assinatura, feche a guia ou janela duplicada do navegador.

Criar uma fonte de dados do tipo None

O tipo de fonte de dados None transmite o modelo de mapeamento de solicitação diretamente ao modelo de mapeamento de resposta.

1.    Na guia ou janela original do navegador, abra o console do AWS AppSync.

2.    No painel de navegação esquerdo, escolha Fontes de dados.

3.    Escolha Criar fonte de dados.

4.    Na página Nova fonte de dados, em Criar nova fonte de dados, conclua as seguintes etapas:
Em Nome da fonte de dados, insira um nome. Por exemplo, real_time_data.
Em Nome da fonte de dados, insira um Nenhum.

5.    Escolha Criar.

Para mais informações, consulte Anexar uma fonte de dados.

Adicionar uma mutação ao esquema

Crie uma segunda mutação para um administrador usar ou acionar ao atualizar o esquema.

Atualize o esquema com uma mutação que transmita atualizações do banco de dados à fonte de dados do tipo None.

1.    Abra o console do AWS AppSync.

2.    No painel de navegação esquerdo, escolha Esquema.

3.    No editor de esquema, em tipo Mutation {, adicione o seguinte comando para criar o novo tipo de mutação para atualizações externas:

createBookExt(input: CreateBookInput!): Book

4.    No editor de esquema, em tipo Subscription {, localize a seguinte linha:

onCreateBook(id: ID, title: String): Book
        @aws_subscribe(mutations: ["createBook"])

5.    Adicione "createBookExt" à lista de mutações:

onCreateBook(id: ID, title: String): Book
        @aws_subscribe(mutations: ["createBook", "createBookExt"])

6.    Escolha Salvar esquema.

Para mais informações, consulte Projeto do esquema.

Anexar um resolvedor à mutação

1.    Abra o console do AWS AppSync.

2.    Na página Esquema da sua API, em Resolvedores, role para baixo até Mutação. Ou, em Tipos de filtro, insira Mutation.

3.    Ao lado de createBookExt(...): Book, em Resolvedor, escolha Anexar.

4.    Na página Criar novo resolvedor, em Nome da fonte de dados, escolha o nome da fonte de dados do tipo None que você criou. Por exemplo, real_time_data.

5.    Em Configurar o modelo de mapeamento de solicitação, localize a função request:

export function request(ctx) {
    return {};
}

6.    Modifique a função de forma a retornar ctx.args:

export function request(ctx) {
    return ctx.args;
}

7.    Escolha Criar.

Para mais informações, consulte Configurar resolvedores (VTL).

Criar uma nova assinatura de teste

1.    Abra o console do AWS AppSync.

2.    No painel de navegação esquerdo, escolha Consultas.

3.    Na página Consultas da sua API, abra uma guia ou janela duplicada do navegador.

4.    Na guia ou janela duplicada do navegador, limpe o conteúdo do editor de consultas e insira a seguinte consulta:

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

5.    Escolha o botão de reprodução (Executar consulta). A guia ou janela duplicada do navegador agora está inscrita nas mutações createBook e createBookExt.

Criar uma nova mutação de teste

1.    Na guia ou janela original do navegador, na página Consultas da sua API, limpe o conteúdo do editor de consultas. Em seguida, insira a seguinte consulta:

mutation createBook($createbookinput: CreateBookInput!) {
  createBook(input: $createbookinput) {
    id
    title
  }
}

Na seção Variáveis de consulta na parte inferior do editor, limpe o conteúdo e insira a seguinte consulta:

{
  "createbookinput": {
    "title": "My New Book"
  }
}

A consulta anterior cria um novo Book com a mutação createBook.

2.    Escolha o botão de reprodução (Executar consulta).

3.    Na guia ou janela duplicada do navegador (assinatura), observe que o assinante recebe a atualização em tempo real.

(Opcional) Consultar exemplos de casos de uso

Ao criar sua aplicação de cliente e aplicar esses conceitos, você pode usar o seguinte exemplo de criação de uma aplicação de companhia aérea que fornece preços e horários de voos.

As etapas a seguir demonstram como notificar clientes inscritos quando os detalhes dos voos são alterados em uma tabela do DynamoDB:

1.    Crie uma função do AWS Lambda que use um stream do DynamoDB como acionador. Quando a tabela do DynamoDB é atualizada, ela invoca a função do Lambda. Para mais informações, consulte Como usar o AWS Lambda com o Amazon DynamoDB.

2.    No código da função do Lambda, uma inclua lógica para filtrar as atualizações apropriadas e realizar uma chamada de mutação para o AWS AppSync. Isso faz com que o AWS AppSync notifique os assinantes por meio da assinatura. Para mais informações, consulte Tutorial: Resolvedores do AWS Lambda.

3.    No AWS AppSync, adicione um novo campo de mutação (por exemplo, publishPrice) com um resolvedor local.

4.    Inscreva-se nessa mutação em um campo de assinatura (por exemplo, onPriceUpdate).

Esquema de exemplo

type flightDetails {
  id: ID!
  src: String!
  destn: String!
  price : Int
}

type Mutation {
   # A local resolver targeting a None data source that publishes the message to subscribed clients.
  publishPrice(price: Int): flightDetails
}

type Subscription {
  # Notified whenever *publishPrice* is called.
  onPriceUpdate: Message
    @aws_subscribe(mutations: ["publishPrice"])
}

type Query { ... }

Para mais informações, consulte Projeto do esquema.

5.    Crie outra função do AWS Lambda que use um fluxo do DynamoDB como ativação. Nessa função, chame a mutação publishPrice. Como a mutação publishPrice tem um resolvedor local, os dados não são gravados novamente no DynamoDB. Com esse método, você pode usar o AWS AppSync como operador PubSub.

Para mais informações e outro exemplo de caso de uso, consulte Tutorial: Resolvedores locais.


Informações relacionadas

Tutoriais de resolvedores (VTL)

Executar consultas e mutações

Referência do modelo de mapeamento de resolvedores (VTL)