Test e debug dei resolver in () AWS AppSync JavaScript - AWS AppSync

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 JavaScript

AWS AppSync esegue resolver su un campo GraphQL su un'origine dati. Quando si lavora con i resolver per pipeline, le funzioni interagiscono con le fonti di dati. Come descritto nella panoramica dei JavaScript resolver, le funzioni comunicano con le fonti di dati utilizzando gestori di richieste e risposte scritti ed eseguiti nel runtime. JavaScript APPSYNC_JS Ciò consente di fornire logica e condizioni personalizzate prima e dopo la comunicazione con l'origine dati.

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 dell'intera richiesta proveniente da Amazon. CloudWatch Ciò include i risultati della fonte di dati.

Test con dati fittizi

Quando viene richiamato un resolver GraphQL, contiene un context oggetto che contiene informazioni pertinenti sulla richiesta. Tali informazioni includono gli argomenti provenienti da un client, le informazioni sull'identità e i dati del campo GraphQL padre. Memorizza anche i risultati della fonte di dati, che può essere utilizzata nel gestore delle risposte. Per ulteriori informazioni su questa struttura e sulle utilità di supporto disponibili da utilizzare durante la programmazione, vedete il riferimento all'oggetto contestuale Resolver.

Quando si scrive o si modifica una funzione resolver, è possibile passare un oggetto contestuale fittizio o di test all'editor della console. Ciò consente di vedere come valutano sia il gestore di richiesta che quello di risposta senza che vengano effettivamente eseguiti su una fonte di 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.

  1. Accedi a AWS Management Console e apri la console. AppSync

    1. Nella APIsdashboard, scegli il tuo GraphQLAPI.

    2. Nella barra laterale, scegli Funzioni.

  2. Scegli una funzione esistente.

  3. Nella parte superiore della pagina Aggiorna funzione, scegli Seleziona contesto di test, quindi scegli Crea nuovo contesto.

  4. Seleziona un oggetto di contesto di esempio o JSON compilalo manualmente nella finestra Configura contesto di test di seguito.

  5. Immettete un nome per il contesto di testo.

  6. Seleziona il pulsante Save (Salva).

  7. Per valutare il resolver utilizzando l'oggetto context fittizio, scegliere Run Test (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. Vuoi anche scrivere alcuni valori dagli argomenti di una mutazione GraphQL e consentire solo a utenti specifici di vedere una risposta. Il seguente frammento mostra come potrebbe apparire lo schema:

type Dog { breed: String color: String } type Mutation { addDog(firstname: String, age: Int): Dog }

Puoi scrivere una AWS AppSync funzione e aggiungerla al tuo addDog resolver per gestire la mutazione. Per testare la tua AWS AppSync funzione, puoi compilare 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" } }

È possibile testare la AWS AppSync funzione utilizzando il codice seguente:

import { util } from '@aws-appsync/utils'; export function request(ctx) { return { operation: 'PutItem', key: util.dynamodb.toMapValues({ id: util.autoId() }), attributeValues: util.dynamodb.toMapValues(ctx.args), }; } export function response(ctx) { if (ctx.identity.username === 'Nadia') { console.log("This request is allowed") return ctx.result; } util.unauthorized(); }

Il gestore di richieste e risposte valutato contiene i dati dell'oggetto del contesto 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.

Testare i gestori di richieste e risposte con's AWS AppSync APIs

Puoi usare il EvaluateCode API comando per testare in remoto il tuo codice con dati simulati. Per iniziare a usare il comando, assicurati di aver aggiunto l'appsync:evaluateMappingCodeautorizzazione alla tua politica. Per esempio:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appsync:evaluateCode", "Resource": "arn:aws:appsync:<region>:<account>:*" } ] }

È possibile sfruttare il comando utilizzando AWS CLIo AWS SDKs. Ad esempio, prendiamo lo Dog schema e i relativi gestori di richiesta e risposta delle AWS AppSync funzioni della sezione precedente. Utilizzando il CLI comando sulla stazione locale, salvate il codice in un file denominatocode.js, quindi salvate l'contextoggetto in un file denominato. context.json Dalla shell, esegui il seguente comando:

$ aws appsync evaluate-code \ --code file://code.js \ --function response \ --context file://context.json \ --runtime name=APPSYNC_JS,runtimeVersion=1.0.0

La risposta contiene un file evaluationResult contenente il payload restituito dal gestore. Contiene anche un logs oggetto che contiene l'elenco dei log generati dal gestore durante la valutazione. Ciò semplifica il debug dell'esecuzione del codice e la visualizzazione delle informazioni sulla valutazione per facilitare la risoluzione dei problemi. Per esempio:

{ "evaluationResult": "{\"breed\":\"Miniature Schnauzer\",\"color\":\"black_grey\"}", "logs": [ "INFO - code.js:13:5: \"This request is allowed\"" ] }

evaluationResultPuò essere analizzato comeJSON, il che dà:

{ "breed": "Miniature Schnauzer", "color": "black_grey" }

UtilizzandoSDK, potete incorporare facilmente i test della vostra suite di test preferita per convalidare il comportamento dei vostri gestori. Ti consigliamo di creare test utilizzando Jest Testing Framework, ma qualsiasi suite di test funziona. Il seguente frammento mostra un'ipotetica esecuzione di convalida. Nota che ci aspettiamo che la risposta di valutazione sia validaJSON, quindi JSON recuperiamo dalla stringa JSON.parse la risposta:

const AWS = require('aws-sdk') const fs = require('fs') const client = new AWS.AppSync({ region: 'us-east-2' }) const runtime = {name:'APPSYNC_JS',runtimeVersion:'1.0.0') test('request correctly calls DynamoDB', async () => { const code = fs.readFileSync('./code.js', 'utf8') const context = fs.readFileSync('./context.json', 'utf8') const contextJSON = JSON.parse(context) const response = await client.evaluateCode({ code, context, runtime, function: 'request' }).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 totalTime: 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.

Per eseguire questa operazione, è 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. In pochi istanti, i registri completi delle richieste e delle risposte relativi all'operazione vengono trasmessi in streaming a questa sezione e possono essere visualizzati nella console.