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à.
Test e debug dei resolver in () AWS AppSync VTL
Nota
Ora supportiamo principalmente il runtime _JS e la relativa documentazione. APPSYNC Valuta la possibilità di utilizzare il runtime APPSYNC _JS e le relative guide qui.
AWS AppSync esegue resolver su un campo GraphQL su un'origine dati. Come descritto nella panoramica dei modelli di mappatura Resolver, i resolver comunicano con le fonti di dati utilizzando un linguaggio di template. Ciò consente di personalizzare il comportamento e applicare logica e condizioni prima e dopo la comunicazione con l'origine dati. Per una guida introduttiva alla programmazione in stile tutorial per la scrittura di resolver, consulta la guida alla programmazione dei modelli di mappatura Resolver.
Per aiutare gli sviluppatori a scrivere, testare ed eseguire il debug di questi resolver, la AWS AppSync console fornisce anche strumenti per creare una richiesta e una risposta GraphQL con dati fittizi fino al singolo resolver di campo. Inoltre, puoi eseguire query, mutazioni e sottoscrizioni nella AWS AppSync console e visualizzare un flusso di log dettagliato da Amazon CloudWatch dell'intera richiesta. Ciò include i risultati di un'origine dati.
Test con dati fittizi
Quando viene richiamato un resolver GraphQL, contiene un context
oggetto che contiene informazioni sulla richiesta. Tali informazioni includono gli argomenti provenienti da un client, le informazioni sull'identità e i dati del campo GraphQL padre. Contiene anche i risultati della fonte di dati, che possono essere utilizzati nel modello di risposta. Per ulteriori informazioni su questa struttura e sulle utilità helper disponibili per la programmazione, consulta le informazioni di riferimento contestuali sui modelli di mappatura dei resolver.
Quando si scrive o si modifica un resolver, è possibile passare un oggetto di contesto fittizio o di test all'editor della console. In questo modo è possibile vedere in che modo i modelli di richiesta e di risposta eseguono la valutazione senza effettivamente eseguire un'origine dati. Puoi ad esempio passare un argomento firstname: Shaggy
di test e vedere i relativi risultati quando usi $ctx.args.firstname
nel codice del modello. Puoi anche testare la valutazione di utilità helper, ad esempio $util.autoId()
o util.time.nowISO8601()
.
Test dei resolver
Questo esempio utilizzerà la AWS AppSync console per testare i resolver.
-
Accedi a AWS Management Console e apri la console. AppSync
-
Nella APIsdashboard, scegli il tuo GraphQLAPI.
-
Nella barra laterale, scegli Schema.
-
-
Se non l'hai già fatto, sotto il tipo e accanto al campo, scegli Allega per aggiungere il tuo resolver.
Altrimenti, seleziona il resolver già presente nel campo.
-
Nella parte superiore della pagina Modifica resolver, scegli Seleziona contesto di test, scegli Crea nuovo contesto.
-
Seleziona un oggetto di contesto di esempio o JSON compilalo manualmente nella finestra del contesto di esecuzione riportata di seguito.
-
Immettete un nome di contesto di testo.
-
Seleziona il pulsante Save (Salva).
-
Nella parte superiore della pagina Edit Resolver, scegli Esegui test.
Per un esempio più pratico, supponiamo di avere un'app che memorizza un tipo GraphQL che utilizza la generazione automatica Dog
di ID per gli oggetti e li archivia in Amazon DynamoDB. Devi inoltre scrivere alcuni valori dagli argomenti di una mutazione GraphQL e permettere la visualizzazione di una risposta solo a determinati utenti. Di seguito viene mostrato come potrebbe apparire lo schema:
type Dog { breed: String color: String } type Mutation { addDog(firstname: String, age: Int): Dog }
Quando aggiungi un resolver per la addDog
mutazione, puoi popolare un oggetto di contesto come nell'esempio seguente. Il seguente include gli argomenti name
e age
del client, oltre che un elemento username
popolato nell'oggetto identity
:
{ "arguments" : { "firstname": "Shaggy", "age": 4 }, "source" : {}, "result" : { "breed" : "Miniature Schnauzer", "color" : "black_grey" }, "identity": { "sub" : "uuid", "issuer" : " https://cognito-idp.{region}.amazonaws.com/{userPoolId}", "username" : "Nadia", "claims" : { }, "sourceIp" :[ "x.x.x.x" ], "defaultAuthStrategy" : "ALLOW" } }
Puoi eseguire un test usando i modelli di mappatura della richiesta e della risposta seguenti:
Modello di richiesta
{ "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "$util.autoId()" } }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }
Modello di risposta
#if ($context.identity.username == "Nadia") $util.toJson($ctx.result) #else $util.unauthorized() #end
Il modello valutato contiene i dati dell'oggetto context di test e il valore generato da $util.autoId()
. Inoltre, se decidi di modificare username
in un valore diverso da Nadia
, i risultati non verranno restituiti perché il controllo di autorizzazione avrebbe esito negativo. Per ulteriori informazioni sul controllo granulare degli accessi, consulta Casi d'uso delle autorizzazioni.
Test dei modelli di mappatura con's AWS AppSync APIs
È possibile utilizzare il EvaluateMappingTemplate
API comando per testare in remoto i modelli di mappatura con dati simulati. Per iniziare a usare il comando, assicurati di aver aggiunto l'appsync:evaluateMappingTemplate
autorizzazione alla tua politica. Per esempio:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appsync:evaluateMappingTemplate", "Resource": "arn:aws:appsync:<region>:<account>:*" } ] }
È possibile sfruttare il comando utilizzando AWS CLIDog
lo schema e i relativi modelli di mappatura richiesta/risposta della sezione precedente. Utilizzando CLI sulla stazione locale, salvate il modello di richiesta in un file denominatorequest.vtl
, quindi salvate l'context
oggetto in un file denominato. context.json
Dalla shell, esegui il seguente comando:
aws appsync evaluate-mapping-template --template file://request.vtl --context file://context.json
Il comando restituisce la seguente risposta:
{ "evaluationResult": "{\n \"version\" : \"2017-02-28\",\n \"operation\" : \"PutItem\",\n \"key\" : {\n \"id\" : { \"S\" : \"afcb4c85-49f8-40de-8f2b-248949176456\" }\n },\n \"attributeValues\" : {\"firstname\":{\"S\":\"Shaggy\"},\"age\":{\"N\":4}}\n}\n" }
evaluationResult
Contiene i risultati del test del modello fornito con il modello fornitocontext
. Puoi anche testare i tuoi modelli utilizzando il AWS SDKs. Ecco un esempio di utilizzo di AWS SDK for JavaScript V2:
const AWS = require('aws-sdk') const client = new AWS.AppSync({ region: 'us-east-2' }) const template = fs.readFileSync('./request.vtl', 'utf8') const context = fs.readFileSync('./context.json', 'utf8') client .evaluateMappingTemplate({ template, context }) .promise() .then((data) => console.log(data))
UtilizzandoSDK, puoi incorporare facilmente i test della tua suite di test preferita per convalidare il comportamento del tuo modello. Ti consigliamo di creare test utilizzando Jest Testing FrameworkJSON.parse
la risposta:
const AWS = require('aws-sdk') const fs = require('fs') const client = new AWS.AppSync({ region: 'us-east-2' }) test('request correctly calls DynamoDB', async () => { const template = fs.readFileSync('./request.vtl', 'utf8') const context = fs.readFileSync('./context.json', 'utf8') const contextJSON = JSON.parse(context) const response = await client.evaluateMappingTemplate({ template, context }).promise() const result = JSON.parse(response.evaluationResult) expect(result.key.id.S).toBeDefined() expect(result.attributeValues.firstname.S).toEqual(contextJSON.arguments.firstname) })
Ciò produce il seguente risultato:
Ran all test suites. > jest PASS ./index.test.js ✓ request correctly calls DynamoDB (543 ms) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 1.511 s, estimated 2 s
Eseguire il debug di una query live
Non c'è nulla che possa sostituire un end-to-end test e una registrazione per eseguire il debug di un'applicazione di produzione. AWS AppSync consente di registrare gli errori e i dettagli completi delle richieste utilizzando Amazon CloudWatch. Inoltre, puoi utilizzare la AWS AppSync console per testare le query, le mutazioni e gli abbonamenti GraphQL e trasmettere in live streaming i dati di registro per ogni richiesta nell'editor di query per il debug in tempo reale. Per le sottoscrizioni, i log visualizzano le informazioni relative al tempo della connessione.
A tale scopo, è necessario che Amazon CloudWatch logs sia abilitato in anticipo, come descritto in Monitoraggio e registrazione. Successivamente, nella AWS AppSync console, scegli la scheda Queries e inserisci una query GraphQL valida. Nella sezione in basso a destra, fai clic e trascina la finestra Logs per aprire la visualizzazione dei log. Sulla parte superiore della pagina, scegliere l'icona con la freccia per la riproduzione per eseguire la query GraphQL. Dopo alcuni istati, i log completi per la richiesta e la risposta per l'operazione verranno trasmessi in questa sezione della console, dove potrai visualizzarli.