Salta al contenuto

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

7 minuti di lettura
0

Ho bisogno che i miei client di app si aggiornino in tempo reale quando vengono apportate modifiche esterne al database che non vengono eseguite tramite mutazioni lato client. Come posso utilizzare AWS AppSync per notificare agli abbonati queste modifiche?

Breve descrizione

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

Completa i passaggi nella sezione Risoluzione per creare un esempio di API GraphQL. 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 procedura guidata per lo schema di AWS AppSync per creare una nuova API GraphQL. Per ulteriori informazioni, consulta Progettare API GraphQL con AWS AppSync.

1.    Apri la console AWS AppSync.

2.    Scegli Crea API.

3.    Nella pagina Inizia, in Customize your API or import from Amazon DynamoDB (Personalizza l’API o importa da Amazon DynamoDB), scegli Crea con procedura guidata, quindi seleziona Inizia.

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 l'app. Per questo esempio di configurazione, 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 dell'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 di riproduzione (Esegui query). La scheda o la finestra del browser duplicata è associata alle mutazioni createBook.

5.    Nella scheda o finestra del browser originale, scegli il pulsante di riproduzione (Esegui query), quindi seleziona 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.

Crea un'origine dati di tipo Nessuno

Il tipo di origine dati Nessuno 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 pannello 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 Nessuno.

5.    Scegli Crea.

Per ulteriori informazioni, consulta Collegare un'origine dati in AWS AppSync.

Aggiungi una mutazione allo schema

Crea una seconda mutazione utilizzabile da un amministratore o attivabile quando aggiorni lo schema.

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

1.    Apri la console AWS AppSync.

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

3.    Nell'editor dello schema, in tipo Mutazione {, 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 tipo Abbonamento {, 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 Progettazione dello schema GraphQL.

Collega un resolver alla mutazione

1.    Apri la console AWS AppSync.

2.    Nella pagina Schema dell’API, alla voce Resolver, scorri verso il basso fino a Mutazione. Oppure, per Filtra il tipo, inserisci Mutazione.

3.    Accanto a createBookExt(...): Book, per 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 request:

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 Creazione di interrogazioni di base (VTL).

Crea un nuovo abbonamento di prova

1.    Apri la console AWS AppSync.

2.    Nel pannello 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 di riproduzione (Esegui query). La scheda o la finestra del browser duplicata ora è associata alle mutazioni createBook e createBookExt.

Crea una nuova mutazione di prova

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 di riproduzione (Esegui query).

3.    Nella scheda o finestra del browser duplicata (abbonamento), nota 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 dei voli in una tabella DynamoDB:

1.    Crea una funzione AWS Lambda che utilizzi un flusso DynamoDB come attivatore. Quando la tabella DynamoDB si aggiorna, invoca 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 Tutorial: utilizzo dei resolver in AWS Lambda.

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

4.    Abbonati alla mutazione in un campo di abbonamento (ad esempio, denominato onPriceUpdate).

Esempio di schema

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 Progettazione dello schema GraphQL.

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

Per ulteriori informazioni e un altro esempio di caso d'uso, consulta Tutorial: utilizzo di resolver locali in AWS AppSync.


Informazioni correlate

Tutorial sui resolver VTL per AWS AppSync

Che cos'è AWS AppSync?

Riferimento al modello di mappatura del resolver (VTL) per AWS AppSync