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 interrogazioni di base () VTLI resolver GraphQL connettono i campi nello schema di un tipo a un'origine dati. I resolver sono il meccanismo mediante il quale vengono soddisfatte le richieste. AWS AppSync possono creare e connettere automaticamente i resolver da uno schema oppure creare uno schema e connettere i resolver da una tabella esistente senza dover scrivere alcun codice.
Resolver AWS AppSync utilizzati 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 del modello di mappatura Resolver, mentre le utilità di supporto disponibili per la programmazione sono disponibili nel riferimento al contesto del modello di mappatura Resolver. AWS AppSync dispone anche di flussi di test e debug integrati che puoi usare 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 adatto al tuo tipo. Query
- Console
-
-
Accedi a AWS Management Console e apri la AppSync console.
-
Nella APIsdashboard, scegli il tuo GraphQLAPI.
-
Nella barra laterale, scegli Schema.
-
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. È possibile allegare resolver ai campi. Ad esempio, nella sezione Tipo di query, scegli Allega accanto al campo. getTodos
-
Nella pagina Create Resolver, scegli l'origine dati che hai creato nella guida Allegare una fonte di dati. Nella finestra Configura modelli di mappatura, puoi scegliere sia il modello generico di mappatura di richiesta che quello di risposta utilizzando l'elenco a discesa a destra o scriverne uno personalizzato.
-
Per i casi d'uso più comuni, la AWS AppSync console dispone di modelli integrati che è possibile utilizzare per recuperare elementi dalle fonti di dati (ad esempio, le query su tutti gli elementi, le ricerche individuali, ecc.). Ad esempio, nella versione semplice dello schema di Designing your schema in cui getTodos
non c'era l'impaginazione, il modello di mappatura delle richieste per elencare gli articoli è il seguente:
{
"version" : "2017-02-28",
"operation" : "Scan"
}
-
È sempre necessario un modello di mappatura delle risposte da allegare alla 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, lo sarebbe. $context.result
AWS AppSync fornisce funzioni di supporto per operazioni comuni, come la $util.toJson
funzione elencata in precedenza, per formattare correttamente le risposte. Per un elenco completo delle funzioni, vedere il riferimento all'utilità del modello di mappatura Resolver.
-
Scegli Save Resolver.
- API
-
- CLI
-
-
Crea un resolver eseguendo il comando. create-resolver
Dovrai digitare 6 parametri per questo particolare comando:
-
api-id
I tuoiAPI.
-
Il type-name
tipo che desideri modificare nel tuo schema. Nell'esempio della console, questo eraQuery
.
-
Il field-name
campo che vuoi modificare nel tuo tipo. Nell'esempio della console, questo eragetTodos
.
-
La fonte data-source-name
di dati che hai creato nella guida Allegare una fonte di dati.
-
Ilrequest-mapping-template
, che è il corpo della richiesta. Nell'esempio della console, questo era:
{
"version" : "2017-02-28",
"operation" : "Scan"
}
-
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 al seguente:
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)"
Un output verrà restituito inCLI. 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)"
}
}
-
Per modificare i campi e/o i modelli di mappatura 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 passaggio successivo consiste nel creare un resolver adatto al tuo tipo. Mutation
- Console
-
-
Accedi a AWS Management Console e apri la AppSync console.
-
Nella APIsdashboard, scegli il tuo GraphQLAPI.
-
Nella barra laterale, scegli Schema.
-
Nella sezione Tipo di mutazione, scegli Allega accanto al addTodo
campo.
-
Nella pagina Create Resolver, scegli l'origine dati che hai creato nella guida Allegare una fonte di dati.
-
Nella finestra Configura modelli di mappatura, è necessario modificare il modello di richiesta perché si tratta di una mutazione in cui si aggiunge 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)
}
-
AWS AppSync converte automaticamente gli argomenti definiti nel addTodo
campo dallo schema GraphQL in operazioni DynamoDB. L'esempio precedente archivia i record in DynamoDB utilizzando una chiave id
of, che viene passata dall'argomento di mutazione as. $ctx.args.id
Tutti gli altri campi che passi attraverso vengono mappati automaticamente 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 e debug resolvers e Monitoraggio e registrazione.
-
Scegli Save Resolver.
- API
-
Puoi farlo anche APIs utilizzando i comandi nella sezione Crea il tuo primo resolver e i dettagli dei parametri in questa sezione.
- CLI
-
Puoi farlo anche CLI utilizzando i comandi nella sezione Crea il tuo primo resolver e i dettagli dei parametri in questa sezione.
A questo punto, se non stai utilizzando i resolver avanzati, puoi iniziare a utilizzare GraphQL API come descritto in Utilizzo del. API
Resolver avanzati
Se stai seguendo la sezione Avanzate e stai creando uno schema di esempio in Progettazione dello schema per eseguire una scansione impaginata, usa 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 si dispone di una Comments
tabella e si sta risolvendo il campo dei commenti sul Todo
tipo (che restituisce un tipo di[Comment]
), è possibile 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 descritto in Allegare un'origine dati.
Stiamo utilizzando un'operazione di interrogazione su una seconda tabella solo a scopo illustrativo. È possibile utilizzare invece un'altra operazione su DynamoDB. Inoltre, puoi estrarre i dati da un'altra fonte di dati, ad AWS Lambda esempio Amazon OpenSearch Service, perché la relazione è controllata dal tuo schema GraphQL.
- Console
-
-
Accedi a AWS Management Console e apri la AppSync console.
-
Nella APIsdashboard, scegli il tuo GraphQLAPI.
-
Nella barra laterale, scegli Schema.
-
Nel tipo Todo, scegli Allega accanto al comments
campo.
-
Nella pagina Create Resolver, scegli l'origine dati della tabella Commenti. Il nome predefinito per la tabella Commenti delle guide di avvio rapido èAppSyncCommentTable
, ma può variare a seconda del nome assegnato.
-
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)
}
}
}
}
-
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)
-
Scegli Save Resolver.
-
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 APIs utilizzando i comandi nella sezione Crea il tuo primo resolver e i dettagli dei parametri in questa sezione.
- CLI
-
Puoi farlo anche CLI utilizzando i comandi nella sezione Crea il tuo primo resolver e i dettagli dei parametri in questa sezione.