View a markdown version of this page

Creazione di domande di base (VTL) - AWS AppSync GraphQL

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à.

Creazione di domande di base (VTL)

Nota

Ora supportiamo principalmente il runtime APPSYNC_JS e la relativa documentazione. Prendi in considerazione l'utilizzo del runtime APPSYNC_JS e delle relative guide qui. https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers-js.html

I resolver GraphQL connettono i campi nello schema di un tipo a un'origine dati. I resolver sono il meccanismo mediante il quale le richieste vengono soddisfatte. AWS AppSync possono creare e connettere automaticamente i resolver da uno schema o creare uno schema e connettere i resolver da una tabella esistente senza dover scrivere alcun codice.

Risolutori in AWS AppSync uso JavaScript per convertire un'espressione GraphQL in un formato utilizzabile dall'origine dati. In alternativa, i modelli di mappatura possono essere scritti in Apache Velocity Template Language (VTL) per convertire un'espressione GraphQL in un formato utilizzabile dall'origine dati.

Questa sezione ti mostrerà come configurare i resolver usando VTL. Una guida introduttiva alla programmazione in stile tutorial per la scrittura di resolver è disponibile nella guida alla programmazione dei modelli di mappatura Resolver e le utilità di supporto disponibili per la programmazione sono disponibili nel riferimento al contesto del modello di mappatura Resolver. Resolver Mapping Template Context Reference AWS AppSync dispone anche di flussi di test e debug integrati che puoi utilizzare quando modifichi o crei da zero. Per ulteriori informazioni, consulta Test and debug resolvers.

Ti consigliamo di seguire questa guida prima di provare a utilizzare uno dei tutorial sopra menzionati.

In questa sezione, spiegheremo come creare un resolver, aggiungere un resolver per le mutazioni e utilizzare configurazioni avanzate.

Crea il tuo primo resolver

Seguendo gli esempi delle sezioni precedenti, il primo passo è creare un resolver per il tuo tipo. Query

Console
  1. Accedi Console di gestione AWS e apri la AppSync console.

    1. Nella dashboard delle API, scegli la tua API GraphQL.

    2. Nella barra laterale, scegli Schema.

  2. Sul lato destro della pagina, c'è una finestra chiamata Resolvers. Questa casella contiene un elenco dei tipi e dei campi definiti nella finestra Schema sul lato sinistro della pagina. Puoi allegare risolutori ai campi. Ad esempio, nel tipo di query, scegli Allega accanto al campo. getTodos

  3. Nella pagina Create Resolver, scegli l'origine dati che hai creato nella guida Allegare una fonte di dati. Nella finestra Configura i modelli di mappatura, puoi scegliere sia i modelli generici di mappatura delle richieste che quelli delle risposte utilizzando l'elenco a discesa a destra o scriverne uno personalizzato.

    Nota

    L'abbinamento di un modello di mappatura delle richieste a un modello di mappatura delle risposte è chiamato Unit Resolver. Gli unit resolver sono in genere destinati a eseguire operazioni meccaniche; si consiglia di utilizzarli solo per operazioni singole con un numero limitato di origini dati. Per operazioni più complesse, consigliamo di utilizzare risolutori di pipeline, in grado di eseguire più operazioni con più origini dati in sequenza.

    Per ulteriori informazioni sulla differenza tra i modelli di mappatura delle richieste e delle risposte, consulta Unit resolvers. https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-overview.html#unit-resolvers

    Per ulteriori informazioni sull'utilizzo dei risolutori di pipeline, consulta Pipeline resolvers. Pipeline Resolvers

  4. Per i casi d'uso più comuni, la AWS AppSync console dispone di modelli integrati che puoi utilizzare per ottenere elementi da origini dati (ad esempio, tutte le query sugli elementi, ricerche individuali, ecc.). Ad esempio, nella versione semplice dello schema di Designing your schema where getTodos didn't have pagination, il modello di mappatura delle richieste per elencare gli elementi è il seguente:

    { "version" : "2017-02-28", "operation" : "Scan" }
  5. È sempre necessario un modello di mappatura delle risposte per accompagnare la richiesta. La console ne fornisce uno predefinito con il valore di passthrough seguente per elenchi:

    $util.toJson($ctx.result.items)

    In questo esempio, l'oggetto context (con alias $ctx) per gli elenchi di elementi presenta la forma $context.result.items. Se l'operazione GraphQL restituisce un singolo elemento, sarebbe $context.result. AWS AppSync fornisce funzioni di helper per operazioni comuni, ad esempio la funzione $util.toJson elencata in precedenza, per formattare le risposte correttamente. Per un elenco completo delle funzioni, consulta Resolver Mapping Template Utility Reference.

  6. Scegli Salva Resolver.

API
  1. Crea un oggetto resolver chiamando l'API. CreateResolver

  2. Puoi modificare i campi del tuo resolver chiamando l'API. UpdateResolver

CLI
  1. Crea un resolver eseguendo il comando. create-resolver

    Dovrai digitare 6 parametri per questo particolare comando:

    1. L'api-idindirizzo della tua API.

    2. Il type-name tipo che desideri modificare nel tuo schema. Nell'esempio della console, questo eraQuery.

    3. Il field-name campo che desideri modificare nel tuo tipo. Nell'esempio della console, questo eragetTodos.

    4. L'data-source-nameorigine dati che hai creato nella guida Allegare una fonte di dati.

    5. Ilrequest-mapping-template, che è il corpo della richiesta. Nell'esempio della console, questo era:

      { "version" : "2017-02-28", "operation" : "Scan" }
    6. Ilresponse-mapping-template, che è il corpo della risposta. Nell'esempio della console, questo era:

      $util.toJson($ctx.result.items)

    Un comando di esempio può essere simile a questo:

    aws appsync create-resolver --api-id abcdefghijklmnopqrstuvwxyz --type-name Query --field-name getTodos --data-source-name TodoTable --request-mapping-template "{ "version" : "2017-02-28", "operation" : "Scan", }" --response-mapping-template ""$"util.toJson("$"ctx.result.items)"

    Verrà restituito un output nella CLI. Ecco un esempio:

    { "resolver": { "kind": "UNIT", "dataSourceName": "TodoTable", "requestMappingTemplate": "{ version : 2017-02-28, operation : Scan, }", "resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Query/resolvers/getTodos", "typeName": "Query", "fieldName": "getTodos", "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }
  2. Per modificare i modelli di and/or mappatura dei campi di un resolver, esegui il comando. update-resolver

    Ad eccezione del api-id parametro, i parametri utilizzati nel create-resolver comando verranno sovrascritti dai nuovi valori del comando. update-resolver

Aggiungere un resolver per le mutazioni

Il passo successivo è creare un resolver per il tuo tipo. Mutation

Console
  1. Accedi Console di gestione AWS e apri la AppSync console.

    1. Nella dashboard delle API, scegli la tua API GraphQL.

    2. Nella barra laterale, scegli Schema.

  2. Sotto il tipo di mutazione, scegli Allega accanto al campo. addTodo

  3. Nella pagina Create Resolver, scegli l'origine dati che hai creato nella guida Allegare una fonte di dati.

  4. Nella finestra Configura i modelli di mappatura, dovrai modificare il modello di richiesta perché si tratta di una mutazione in cui aggiungi un nuovo elemento a DynamoDB. Usa modello di mappatura della richiesta seguente:

    { "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }
  5. AWS AppSync converte automaticamente gli argomenti definiti nel addTodo campo dallo schema GraphQL in operazioni DynamoDB. L'esempio precedente memorizza i record in DynamoDB utilizzando una chiave diid, che viene trasmessa dall'argomento di mutazione as. $ctx.args.id Tutti gli altri campi che passi vengono automaticamente mappati agli attributi DynamoDB con. $util.dynamodb.toMapValuesJson($ctx.args)

    Per questo resolver, usare il seguente modello di mappatura della risposta:

    $util.toJson($ctx.result)

    AWS AppSync supporta anche flussi di lavoro di test e debug per la modifica dei resolver. È possibile utilizzare un oggetto context fittizio per visualizzare il valore trasformato del modello prima di effettuare la chiamata. Eventualmente, è possibile visualizzare l'esecuzione di richiesta completa a un'origine dati in modo interattivo quando si esegue una query. Per ulteriori informazioni, consulta Test and debug resolver e Monitoraggio e registrazione. Monitoring and Logging

  6. Scegli Salva Resolver.

API

Puoi farlo anche con le API utilizzando i comandi nella sezione Crea il tuo primo resolver e i dettagli dei parametri di questa sezione.

CLI

Puoi farlo anche nella CLI utilizzando i comandi nella sezione Crea il tuo primo resolver e i dettagli dei parametri di questa sezione.

A questo punto, se non stai utilizzando i resolver avanzati, puoi iniziare a utilizzare la tua API GraphQL come descritto in Utilizzo della tua API. Using Your API

Resolver avanzati

Se stai seguendo la sezione Avanzata e stai creando uno schema di esempio in Progettazione dello schema per eseguire una scansione impaginata, utilizza invece il seguente modello di richiesta per il campo: getTodos

{ "version" : "2017-02-28", "operation" : "Scan", "limit": $util.defaultIfNull(${ctx.args.limit}, 20), "nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null)) }

Per questo caso d'uso della paginazione, la mappatura della risposta è più di un semplice passthrough perché deve contenere sia il cursore (in modo che il client sappia a quale pagina passare) che il set di risultati. Il modello di mappatura è come segue:

{ "todos": $util.toJson($context.result.items), "nextToken": $util.toJson($context.result.nextToken) }

I campi nel modello di mappatura della risposta precedente devono corrispondere ai campi definiti nel tipo TodoConnection.

Nel caso di relazioni in cui hai una Comments tabella e stai risolvendo il campo dei commenti sul Todo tipo (che restituisce un tipo di[Comment]), puoi utilizzare un modello di mappatura che esegue una query sulla seconda tabella. A tale scopo, è necessario aver già creato un'origine dati per la Comments tabella, come indicato in Allegare un'origine dati.

Nota

Stiamo utilizzando un'operazione di interrogazione su una seconda tabella solo a scopo illustrativo. È invece possibile utilizzare un'altra operazione su DynamoDB. Inoltre, puoi estrarre i dati da un'altra fonte di dati, come AWS Lambda Amazon OpenSearch Service, perché la relazione è controllata dal tuo schema GraphQL.

Console
  1. Accedi Console di gestione AWS e apri la AppSync console.

    1. Nella dashboard delle API, scegli la tua API GraphQL.

    2. Nella barra laterale, scegli Schema.

  2. Sotto il tipo Todo, scegli Allega accanto al campo. comments

  3. Nella pagina Create Resolver, scegli l'origine dati della tabella Commenti. Il nome predefinito per la tabella Commenti nelle guide di avvio rapido èAppSyncCommentTable, ma può variare a seconda del nome che le hai assegnato.

  4. Aggiungi il seguente frammento al modello di mappatura della richiesta:

    { "version": "2017-02-28", "operation": "Query", "index": "todoid-index", "query": { "expression": "todoid = :todoid", "expressionValues": { ":todoid": { "S": $util.toJson($context.source.id) } } } }
  5. context.source fa riferimento all'oggetto padre del campo corrente che viene risolto. In questo esempio, source.id si riferisce al singolo oggetto Todo, che viene quindi utilizzato per l'espressione di query.

    Puoi usare il modello di mappatura della risposta passthrough come segue:

    $util.toJson($ctx.result.items)
  6. Scegli Salva Resolver.

  7. Infine, torna alla pagina Schema della console, collega un resolver al addComment campo e specifica l'origine dati per la tabella. Comments Il modello di mappatura della richiesta in questo caso è un semplice oggetto PutItem con il todoid specifico commentato su un argomento, ma puoi utilizzare l'utilità $utils.autoId() per creare una chiave di ordinamento per il commento, come segue:

    { "version": "2017-02-28", "operation": "PutItem", "key": { "todoid": { "S": $util.toJson($context.arguments.todoid) }, "commentid": { "S": "$util.autoId()" } }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }

    Usa un modello di risposta passthrough come segue:

    $util.toJson($ctx.result)
API

Puoi farlo anche con le API utilizzando i comandi nella sezione Crea il tuo primo resolver e i dettagli dei parametri di questa sezione.

CLI

Puoi farlo anche nella CLI utilizzando i comandi nella sezione Crea il tuo primo resolver e i dettagli dei parametri di questa sezione.