Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
AWS AppSync JavaScript panoramica dei resolver
AWS AppSync ti consente di rispondere alle richieste GraphQL eseguendo operazioni sulle tue fonti di dati. Per ogni campo GraphQL su cui desideri eseguire una query, una mutazione o una sottoscrizione, è necessario allegare un resolver.
I resolver sono i connettori tra GraphQL e una fonte di dati. Spiegano AWS AppSync come tradurre una richiesta GraphQL in arrivo in istruzioni per l'origine dati di backend e come tradurre la risposta da tale fonte di dati in una risposta GraphQL. Con AWS AppSync, puoi scrivere i tuoi resolver utilizzandoli JavaScript ed eseguendoli nell'ambiente (). AWS AppSync APPSYNC_JS
AWS AppSync consente di scrivere risolutori di unità o risolutori di pipeline composti da più funzioni in una pipeline. AWS AppSync
Funzionalità di runtime supportate
Il AWS AppSync JavaScript runtime fornisce un sottoinsieme di JavaScript librerie, utilità e funzionalità. Per un elenco completo delle caratteristiche e delle funzionalità supportate dal APPSYNC_JS runtime, vedi Caratteristiche di JavaScript runtime per resolver e funzioni.
Risolutori di unità
Un risolutore di unità è composto da codice che definisce un gestore di richieste e risposte che viene eseguito su una fonte di dati. Il gestore della richiesta accetta un oggetto di contesto come argomento e restituisce il payload della richiesta utilizzato per chiamare l'origine dati. Il gestore della risposta riceve un payload dall'origine dati con il risultato della richiesta eseguita. Il gestore della risposta trasforma il payload in una risposta GraphQL per risolvere il campo GraphQL. Nell'esempio seguente, un resolver recupera un elemento da un'origine dati DynamoDB:
import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { return ddb.get({ key: { id: ctx.args.id } }); } export const response = (ctx) => ctx.result;
Anatomia di un pipeline resolver JavaScript
Un pipeline resolver è composto da codice che definisce un gestore di richieste e risposte e un elenco di funzioni. Ogni funzione ha un gestore di richieste e risposte che esegue su un'origine dati. Poiché un pipeline resolver delega le esecuzioni a un elenco di funzioni, non è quindi collegato a nessuna fonte di dati. Funzioni e resolver di unità sono primitive che eseguono un'operazione su origini dati.
Pipeline resolver, gestore di richieste
Il gestore delle richieste di un pipeline resolver (il passaggio precedente) consente di eseguire alcune logiche di preparazione prima di eseguire le funzioni definite.
Elenco delle funzioni
L'elenco delle funzioni eseguite in sequenza da un resolver di pipeline. Il risultato della valutazione del gestore di richieste del pipeline resolver viene reso disponibile alla prima funzione come. ctx.prev.result Ogni risultato della valutazione della funzione è disponibile per la funzione successiva come. ctx.prev.result
Gestore di risposta del Pipeline Resolver
Il gestore di risposta di un pipeline resolver consente di eseguire una logica finale dall'output dell'ultima funzione al tipo di campo GraphQL previsto. L'output dell'ultima funzione nell'elenco delle funzioni è disponibile nel gestore di risposta del resolver della pipeline come o. ctx.prev.result ctx.result
Flusso di esecuzione
Dato un risolutore di pipeline composto da due funzioni, l'elenco seguente rappresenta il flusso di esecuzione quando viene richiamato il resolver:
-
Pipeline resolver, gestore di richieste
-
Funzione 1: gestore della richiesta di funzione
-
Funzione 1: invocazione dell'origine dati
-
Funzione 1: gestore della risposta alla funzione
-
Funzione 2: gestore della richiesta di funzione
-
Funzione 2: invocazione dell'origine dati
-
Funzione 2: gestore della risposta alla funzione
-
Gestore di risposta Pipeline Resolver
Utili utilità integrate nel runtime di APPSYNC_JS
Nell'utilizzo dei resolver di pipeline, è possibile avvalersi delle seguenti funzionalità.
ctx.stash
Lo stash è un oggetto reso disponibile all'interno di ogni resolver e gestore di richieste e risposte di funzione. La stessa istanza di stash sopravvive durante una singola esecuzione del resolver. Ciò significa che è possibile utilizzare lo stash per passare dati arbitrari tra gestori di richieste e risposte e tra le funzioni di un risolutore di pipeline. Puoi testare lo stash come un normale oggetto. JavaScript
ctx.prev.result
La voce ctx.prev.result corrisponde al risultato dell'operazione precedentemente eseguita nella pipeline. Se l'operazione precedente era il gestore delle richieste del pipeline resolver, ctx.prev.result viene resa disponibile per la prima funzione della catena. Se l'operazione precedente corrisponde alla prima funzione, ctx.prev.result è l'output della prima funzione, disponibile per la seconda funzione della pipeline. Se l'operazione precedente era l'ultima funzione, ctx.prev.result rappresenta l'output dell'ultima funzione e viene resa disponibile al gestore di risposta del pipeline resolver.
util.error
Con util.error è possibile generare un errore di campo. L'utilizzo util.error all'interno di un gestore di richieste o risposte di funzione genera immediatamente un errore di campo, che impedisce l'esecuzione delle funzioni successive. Per maggiori dettagli e altre util.error firme, visita JavaScript Runtime features for resolver and functions.
util.appendError
util.appendErrorè simile autil.error(), con la principale differenza che non interrompe la valutazione del gestore. Segnala invece che c'è stato un errore nel campo, ma consente al gestore di essere valutato e di conseguenza di restituire i dati. L'utilizzo di util.appendError all'interno di una funzione non interrompe il flusso di esecuzione della pipeline. Per maggiori dettagli e altre util.error firme, visita le caratteristiche di JavaScript runtime per resolver e funzioni.
Runtime. EarlyReturn
La runtime.earlyReturn funzione consente di tornare prematuramente da qualsiasi funzione di richiesta. L'utilizzo runtime.earlyReturn all'interno di un gestore di richieste del resolver restituirà il risultato dal resolver. La chiamata da un gestore di richieste di AWS AppSync
funzione restituirà la funzione e continuerà l'esecuzione alla funzione successiva nella pipeline o al gestore di risposta del resolver.
Scrittura di risolutori di pipeline
Un risolutore di pipeline dispone anche di un gestore di richieste e risposte che circonda l'esecuzione delle funzioni nella pipeline: il suo gestore di richieste viene eseguito prima della richiesta della prima funzione e il suo gestore di risposta viene eseguito dopo la risposta dell'ultima funzione. Il gestore delle richieste del resolver può impostare i dati da utilizzare dalle funzioni nella pipeline. Il gestore di risposta del resolver è responsabile della restituzione dei dati che corrispondono al tipo di output del campo GraphQL. Nell'esempio seguente, un gestore di richieste resolver definisceallowedGroups; i dati restituiti devono appartenere a uno di questi gruppi. Questo valore può essere utilizzato dalle funzioni del resolver per richiedere dati. Il gestore delle risposte del resolver effettua un controllo finale e filtra il risultato per assicurarsi che vengano restituiti solo gli elementi che appartengono ai gruppi consentiti.
import { util } from '@aws-appsync/utils'; /** * Called before the request function of the first AppSync function in the pipeline. * @param ctx the context object holds contextual information about the function invocation. */ export function request(ctx) { ctx.stash.allowedGroups = ['admin']; ctx.stash.startedAt = util.time.nowISO8601(); return {}; } /** * Called after the response function of the last AppSync function in the pipeline. * @param ctx the context object holds contextual information about the function invocation. */ export function response(ctx) { const result = []; for (const item of ctx.prev.result) { if (ctx.stash.allowedGroups.indexOf(item.group) > -1) result.push(item); } return result; }
Scrittura AWS AppSync funzioni
AWS AppSync le funzioni consentono di scrivere una logica comune che è possibile riutilizzare su più resolver nello schema. Ad esempio, puoi chiamare QUERY_ITEMS una AWS AppSync funzione responsabile dell'interrogazione degli elementi da un'origine dati Amazon DynamoDB. Per i resolver con cui desideri interrogare gli elementi, aggiungi semplicemente la funzione alla pipeline del resolver e fornisci l'indice delle query da utilizzare. La logica non deve essere reimplementata.
Argomenti supplementari
Argomenti