Come posso notificare agli abbonati di AWS AppSync gli aggiornamenti di database esterni che le mutazioni lato client non eseguono?

7 minuti di lettura
0

È necessario che i client della mia app si aggiornino in tempo reale quando vengono apportate modifiche al database esterno che non vengono eseguite tramite mutazioni sul lato client. Come posso usare AWS AppSync per notificare agli abbonati queste modifiche?

Breve descrizione

Usa i resolver locali per notificare agli abbonati le modifiche al database esterno in tempo reale, senza eseguire una chiamata all'origine dati. I resolver locali sono utili ad esempio per le app che aggiornano regolarmente le informazioni, come le app delle compagnie aeree.

Completa i passaggi nella sezione Risoluzione per creare un'API GraphQL di esempio. L'API GraphQL aggiorna gli abbonati in tempo reale quando i dati vengono scritti su un'origine dati della tabella Amazon DynamoDB.

Risoluzione

Creare un'API GraphQL utilizzando la procedura guidata

Utilizza la guided schema wizard di AWS AppSync per creare una nuova API GraphQL. Per ulteriori informazioni, consulta Designing a GraphQL API.

1.    Apri la console AWS AppSync.

2.    Scegli Crea API.

3.    Nella pagina Guida introduttiva, in Personalizza l’API o importa da Amazon DynamoDB, scegli Crea con procedura guidata, quindi scegli Avvia.

4.    Nella pagina Crea un modello:
In Dai un nome al modello, inserisci un nome per il modello. Per questo esempio, il nome è Book.
In Configura i campi del modello, definisci i tipi di dati per la tua app. Per questa configurazione di esempio, mantieni i nomi e i tipi di campo predefiniti (id e title).
(Facoltativo) Espandi Configura la tabella del modello (facoltativo) per aggiungere un indice.
Scegli Crea.

5.    Nella pagina Crea risorse, inserisci un nome per l’API. Quindi, scegli Crea. AWS AppSync crea l’API e apre la pagina Query dell’API.

Crea un abbonamento di prova

1.    Apri la console AWS AppSync.

2.    Vai alla pagina Query della tua API, quindi apri una scheda o una finestra del browser duplicata.

3.    Nella scheda o finestra del browser duplicata, cancella il contenuto dell'editor di query e inserisci la seguente query:

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

La query precedente crea un abbonamento alle mutazioni createBook.

4.    Scegli il pulsante Riproduci (Esegui query). La scheda o la finestra del browser duplicata è associata alle mutazioni di createBook.

5.    Nella scheda o finestra del browser originale, scegli il pulsante Riproduci (Esegui query), quindi scegli createBook per eseguire la mutazione. I risultati vengono visualizzati sia nella scheda o finestra del browser originale che in quella duplicata (abbonamento).

6.    Dopo aver visualizzato l'abbonamento, chiudi la scheda o la finestra del browser duplicata.

Creare un'origine dati di tipo None

Il tipo di origine dati None passa il modello di mappatura della richiesta direttamente al modello di mappatura della risposta.

1.    Nella scheda o finestra del browser originale, apri la console AWS AppSync.

2.    Nel riquadro di navigazione a sinistra, scegli Origini dati.

3.    Scegli Crea origine dati.

4.    Nella pagina Nuova origine dati, in Crea una nuova origine dati, completa i seguenti passaggi:
In Nome origine dati, inserisci un nome. Ad esempio, real_time_data.
In Tipo di origine dati, scegli None.

5.    Scegli Crea.

Per ulteriori informazioni, consulta Attaching a data source.

Aggiungere una mutazione allo schema

Crea una seconda mutazione da utilizzare da parte di un amministratore o da attivare quando aggiorni lo schema.

Aggiorna lo schema con una mutazione che trasmetta gli aggiornamenti del database all'origine dati di tipo None.

1.    Apri la console AWS AppSync.

2.    Nel riquadro di navigazione a sinistra, scegli Schema.

3.    Nell'editor dello schema, in mutazione tipo {, aggiungi il seguente comando per creare il nuovo tipo di mutazione per gli aggiornamenti esterni:

createBookExt(input: CreateBookInput!): Book

4.    Nell'editor dello schema, in abbonamento tipo {, individua la riga seguente:

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

5.    Aggiungi "createBookExt" all'elenco delle mutazioni:

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

6.    Scegli Salva schema.

Per ulteriori informazioni, consulta Designing your schema.

Collegare un resolver alla mutazione

1.    Apri la console AWS AppSync.

2.    Nella pagina Schema dell’API, in Resolver, scorri verso il basso fino a Mutazione. Oppure, per i Tipi di filtro, inserisci Mutazione.

3.    In CreateBookExt ( ... ): Book, in Resolver, scegli Collega.

4.    Nella pagina Crea un nuovo resolver, in Nome origine dati, scegli il nome per il tipo di origine dati Nessuno che hai creato. Ad esempio, real_time_data.

5.    In ** Configura il modello di mappatura della richiesta**, individua la funzione di richiesta:

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

6.    Modifica la funzione per restituire ctx.args:

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

7.    Scegli Crea.

Per ulteriori informazioni, consulta Configuring resolvers (VTL).

Crea un nuovo abbonamento di prova

1.    Apri la console AWS AppSync.

2.    Nel riquadro di navigazione a sinistra, scegli Query.

3.    Nella pagina Query dell’API, apri una scheda o una finestra del browser duplicata.

4.    Nella scheda o finestra del browser duplicata, cancella il contenuto dell'editor di query e inserisci la seguente query:

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

5.    Scegli il pulsante Riproduci (Esegui query). La scheda o la finestra del browser duplicata è ora associata alle mutazioni createBook e createBookExt.

Creare una nuova mutazione del test

1.    Nella scheda o finestra del browser originale, nella pagina Query dell’API, cancella il contenuto dell'editor di query. Quindi, inserisci la seguente query:

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

Nella sezione Variabili di query nella parte inferiore dell'editor, cancella il contenuto e inserisci la seguente query:

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

La query precedente crea un nuovo Book con la mutazione ** createBook**.

2.    Scegli il pulsante Riproduci (Esegui query).

3.    Nella scheda o finestra del browser duplicata (abbonamento), tieni presente che l'abbonato riceve l'aggiornamento in tempo reale.

(Facoltativo) Fai riferimento a esempi di casi d'uso

Mentre crei la tua app client e applichi questi concetti, puoi utilizzare il seguente esempio di creazione di un'app per compagnie aeree che restituisca prezzi e orari dei voli.

I passaggi seguenti mostrano come notificare ai client abbonati quando cambiano i dettagli del volo in una tabella DynamoDB:

1.    Crea una funzione AWS Lambda che utilizzi uno stream DynamoDB come trigger. Quando la tabella DynamoDB si aggiorna, richiama la funzione Lambda. Per ulteriori informazioni, consulta Uso di AWS Lambda con Amazon DynamoDB.

2.    Nel codice della funzione Lambda, includi la logica per filtrare gli aggiornamenti appropriati ed eseguire una chiamata di mutazione ad AWS AppSync. Questo fa sì che AWS AppSync informi gli abbonati tramite l'abbonamento. Per ulteriori informazioni, consulta Esercitazione: resolver AWS Lambda.

3.    In AWS AppSync, aggiungi un nuovo campo di mutazione (ad esempio, chiamato publishPrice) con un resolver locale.

4.    Sottoscrivi quella mutazione in un campo abbonamento (ad esempio, denominato onPriceUpdate).

Schema di esempio

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 { ... }

Per ulteriori informazioni, consulta Designing your schema.

5.    Crea un'altra funzione AWS Lambda che utilizza uno stream DynamoDB come attivazione. In questa funzione, chiama la mutazione publishPrice. Poiché la mutazione publishPrice ha un resolver locale, i dati non vengono scritti nuovamente su DynamoDB. Con questo metodo, puoi utilizzare AWS AppSync come broker PubSub.

Per ulteriori informazioni e un altro esempio di caso d'uso, consulta Esercitazione: resolver locali.


Informazioni correlate

Esercitazioni Resolver (VTL)

Esegui query e mutazioni

Riferimento al modello di mappatura del resolver (VTL)