As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Testando e depurando resolvedores em () AWS AppSync JavaScript
AWS AppSync executa resolvedores em um campo GraphQL em relação a uma fonte de dados. Ao trabalhar com resolvedores de pipeline, as funções interagem com suas fontes de dados. Conforme descrito na visão geral dos JavaScript resolvedores, as funções se comunicam com as fontes de dados usando manipuladores de solicitação e resposta gravados JavaScript e executados no APPSYNC_JS
tempo de execução. Isso permite fornecer lógica e condições personalizadas antes e depois da comunicação com a fonte de dados.
Para ajudar os desenvolvedores a escrever, testar e depurar esses resolvedores, o AWS AppSync console também fornece ferramentas para criar uma solicitação e uma resposta do GraphQL com dados simulados até o resolvedor de campo individual. Além disso, você pode realizar consultas, mutações e assinaturas no AWS AppSync console e ver um fluxo de log detalhado de toda a solicitação da Amazon. CloudWatch Isso inclui resultados da fonte de dados.
Testes com dados simulados
Quando um resolvedor do GraphQL é invocado, ele contém um objeto context
que contém informações relevantes sobre a solicitação. Isso inclui argumentos de um cliente, informações de identidade e dados do campo pai do GraphQL. Ele também armazena os resultados da fonte de dados, que podem ser usados no manipulador de respostas. Para obter mais informações sobre essa estrutura e os utilitários auxiliares disponíveis para usar durante a programação, consulte a Referência do objeto de contexto do resolvedor.
Ao escrever ou editar uma função de resolução, você pode passar um objeto de contexto simulado ou de teste para o editor do console. Isso permite que você veja como os manipuladores de solicitação e de resposta são avaliados sem realmente serem executados em uma fonte de dados. Por exemplo, você pode enviar um argumento firstname:
Shaggy
de teste e ver como ele avalia ao usar ctx.args.firstname
no código do modelo. Você também pode testar a avaliação de qualquer utilitário auxiliar, como util.autoId()
ou util.time.nowISO8601()
.
Teste de resolvedores
Este exemplo usará o AWS AppSync console para testar os resolvedores.
-
Faça login no AWS Management Console e abra o AppSyncconsole
. -
No APIspainel, escolha seu GraphQLAPI.
-
Na Barra lateral, escolha Funções.
-
-
Escolha uma função existente.
-
Na parte superior da página Atualizar função, escolha Selecionar contexto de teste e, em seguida, escolha Criar novo contexto.
-
Selecione um objeto de contexto de amostra ou preencha-o JSON manualmente na janela Configurar contexto de teste abaixo.
-
Insira um nome de contexto de texto.
-
Clique no botão Salvar.
-
Para avaliar o resolvedor usando esse objeto de contexto simulado, escolha Executar teste.
Como exemplo mais prático, digamos que você tenha um aplicativo que armazena um tipo do GraphQL Dog
que usa a geração automática de ID para objetos e os armazena no Amazon DynamoDB. Você também deseja gravar alguns valores dos argumentos de uma mutação do GraphQL e permitir que apenas usuários específicos vejam uma resposta. O trecho a seguir mostra a aparência do esquema:
type Dog { breed: String color: String } type Mutation { addDog(firstname: String, age: Int): Dog }
Você pode escrever uma AWS AppSync função e adicioná-la ao seu addDog
resolvedor para lidar com a mutação. Para testar sua AWS AppSync função, você pode preencher um objeto de contexto, como no exemplo a seguir. Ele tem argumentos do cliente de name
e age
, e um username
preenchido no objeto 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" } }
Você pode testar sua AWS AppSync função usando o seguinte código:
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(); }
O manipulador de solicitação e resposta avaliado possui os dados do objeto de contexto de teste e o valor gerado de util.autoId()
. Além disso, se você alterasse o username
para um valor diferente de Nadia
, os resultados não seriam retornados pois a verificação de autorização falharia. Para obter mais informações sobre o controle de acesso refinado, consulte Casos de uso de autorização.
Testando manipuladores de solicitações e respostas com's AWS AppSync APIs
Você pode usar o EvaluateCode
API comando para testar remotamente seu código com dados simulados. Para começar a usar o comando, certifique-se de ter adicionado a permissão appsync:evaluateMappingCode
à sua política. Por exemplo:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appsync:evaluateCode", "Resource": "arn:aws:appsync:<region>:<account>:*" } ] }
Você pode aproveitar o comando usando o AWS CLIDog
esquema e seus manipuladores de solicitação e resposta de AWS AppSync função da seção anterior. Usando o CLI em sua estação local, salve o código em um arquivo chamado ecode.js
, em seguida, salve o context
objeto em um arquivo chamadocontext.json
. No seu shell, execute o seguinte comando:
$ aws appsync evaluate-code \ --code file://code.js \ --function response \ --context file://context.json \ --runtime name=APPSYNC_JS,runtimeVersion=1.0.0
A resposta tem um evaluationResult
contendo a carga retornada pelo seu manipulador. Também contém um objeto logs
que contém a lista de logs que foram gerados pelo seu manipulador durante a avaliação. Isso facilita a depuração da execução do código e a visualização de informações sobre sua avaliação para ajudar na solução de problemas. Por exemplo:
{ "evaluationResult": "{\"breed\":\"Miniature Schnauzer\",\"color\":\"black_grey\"}", "logs": [ "INFO - code.js:13:5: \"This request is allowed\"" ] }
O evaluationResult
pode ser analisado comoJSON, o que fornece:
{ "breed": "Miniature Schnauzer", "color": "black_grey" }
Usando oSDK, você pode incorporar facilmente testes de sua suíte de testes favorita para validar o comportamento de seus manipuladores. Recomendamos a criação de testes usando o Estrutura de trabalho de teste JestJSON.parse
para recuperar a resposta JSON da string:
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) })
Isso produz o seguinte resultado:
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
Depuração de uma consulta atual
Não há substituto para um end-to-end teste e um registro para depurar um aplicativo de produção. AWS AppSync permite que você registre erros e detalhes completos da solicitação usando a Amazon CloudWatch. Além disso, você pode usar o AWS AppSync console para testar consultas, mutações e assinaturas do GraphQL e transmitir ao vivo os dados de log de cada solicitação de volta ao editor de consultas para depuração em tempo real. Para assinaturas, os logs exibem as informações do tempo de conexão.
Para fazer isso, você precisa ter CloudWatch os registros da Amazon habilitados com antecedência, conforme descrito em Monitoramento e registro. Em seguida, no AWS AppSync console, escolha a guia Consultas e insira uma consulta GraphQL válida. Na seção inferior direita, clique e arraste a janela Registros em log para abrir a visualização de registros. No topo da página, escolha o ícone de seta de reprodução para executar a consulta do GraphQL. Em alguns instantes, os logs completos da solicitação e da resposta para a operação serão transmitidos para essa seção e você poderá visualizá-los no console.