Configurando e usando resolvedores de pipeline em AWS AppSync () VTL - AWS AppSync

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

Configurando e usando resolvedores de pipeline em AWS AppSync () VTL

nota

Agora, oferecemos suporte principalmente ao tempo de execução APPSYNC _JS e sua documentação. Considere usar o tempo de execução APPSYNC _JS e seus guias aqui.

AWS AppSync executa resolvedores em um campo GraphQL. Em alguns casos, os aplicativos requerem a execução de várias operações para resolver um único campo do GraphQL. Com os resolvedores de pipeline, os desenvolvedores agora podem elaborar operações chamadas Funções e executá-las em sequência. Os resolvedores de pipeline são úteis para aplicativos que, por exemplo, exigem a execução de uma verificação de autorização antes de obter dados para um campo.

Um resolvedor de pipeline é composto de um modelo de mapeamento Anterior, um modelo de mapeamento Posterior e uma lista de Funções. Cada função possui um modelo de mapeamento de solicitação e resposta que é executado mediante uma fonte de dados. Como um resolvedor de pipeline delega a execução a uma lista de funções, ele não está vinculado a nenhuma fonte de dados. Os resolvedores de unidade e funções que executam a operação mediante fontes de dados são primitivos. Consulte Visão geral do modelo de mapeamento do resolvedor para obter mais informações.

Etapa 1: criar um resolvedor de pipeline

No AWS AppSync console, acesse a página Esquema.

Salve o seguinte esquema:

schema { query: Query mutation: Mutation } type Mutation { signUp(input: Signup): User } type Query { getUser(id: ID!): User } input Signup { username: String! email: String! } type User { id: ID! username: String email: AWSEmail }

Vamos conectar um resolvedor de pipeline ao signUpcampo no tipo Mutation. No tipo Mutação no lado direito, escolha Anexar ao lado do campo de mutação signUp. Na página de criação do resolvedor, clique em Ações e depois em Atualizar runtime. Escolha Pipeline Resolver e VTL e selecione Atualizar. Agora, a página deve mostrar 3 seções, uma área de texto Modelo de mapeamento anterior, uma seção Funções e uma área de texto Modelo de mapeamento posterior.

Nosso resolvedor de pipeline cadastra um usuário validando primeiro a entrada do endereço de e-mail e salvando o usuário no sistema. Vamos encapsular a validação do e-mail dentro de uma validateEmailfunção e o salvamento do usuário dentro de uma saveUserfunção. A validateEmailfunção é executada primeiro e, se o e-mail for válido, a saveUserfunção será executada.

O fluxo de execução será da seguinte forma:

  1. Mutação. signUp modelo de mapeamento de solicitação de resolvedor

  2. validateEmail função

  3. saveUser função

  4. Mutação. signUp modelo de mapeamento de resposta do resolvedor

Como provavelmente reutilizaremos a validateEmailfunção em outros resolvedores do nossoAPI, queremos evitar o acesso $ctx.args porque eles mudarão de um campo do GraphQL para outro. Em vez disso, podemos usar o $ctx.stash para armazenar o atributo de e-mail a partir do argumento de campo de entrada signUp(input: Signup).

BEFOREmodelo de mapeamento:

## store email input field into a generic email key $util.qr($ctx.stash.put("email", $ctx.args.input.email)) {}

O console fornece um modelo de AFTERmapeamento de passagem padrão que usaremos:

$util.toJson($ctx.result)

Escolha Criar ou Salvar para atualizar o resolvedor.

Etapa 2: Criando uma função

Na página do resolvedor de pipeline, na seção Funções, clique em Adicionar função e em Criar função. Também é possível criar funções sem passar pela página do resolvedor; para fazer isso, no AWS AppSync console, acesse a página Funções. Selecione o botão Criar função. Vamos criar uma função que verifique se um e-mail é válido e proveniente de um domínio específico. Se o e-mail não for válido, a função gerará um erro. Caso contrário, ele encaminha qualquer entrada fornecida.

Na página da nova função, escolha Ações e, em seguida, Atualizar runtime. Escolha VTL, depois, Atualizar. Certifique-se de ter criado uma fonte de dados NONEdesse tipo. Escolha a fonte de dados na lista Nome da fonte de dados. Em nome da função, insira validateEmail. Na área código da função, substitua tudo por este trecho:

#set($valid = $util.matches("^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com", $ctx.stash.email)) #if (!$valid) $util.error("$ctx.stash.email is not a valid email.") #end { "payload": { "email": $util.toJson(${ctx.stash.email}) } }

Cole isso no modelo de mapeamento de resposta:

$util.toJson($ctx.result)

Verifique suas escolhas e selecione Criar. Acabamos de criar nossa validateEmailfunção. Repita essas etapas para criar a saveUserfunção com os seguintes modelos de mapeamento de solicitação e resposta (para simplificar, usamos uma fonte de NONEdados e fingimos que o usuário foi salvo no sistema após a execução da função. ):

Modelo de mapeamento de solicitação:

## $ctx.prev.result contains the signup input values. We could have also ## used $ctx.args.input. { "payload": $util.toJson($ctx.prev.result) }

Modelo de mapeamento da resposta:

## an id is required so let's add a unique random identifier to the output $util.qr($ctx.result.put("id", $util.autoId())) $util.toJson($ctx.result)

Acabamos de criar nossa saveUserfunção.

Etapa 3: Adicionar uma função a um resolvedor de pipeline

Nossas funções devem ter sido adicionadas automaticamente ao resolvedor de pipeline que acabamos de criar. Se não foi esse o caso ou se você criou as funções por meio da página Funções, é possível clicar em Adicionar função na página de resolvedor para anexá-las. Adicione as saveUserfunções validateEmaile ao resolvedor. A validateEmailfunção deve ser colocada antes da saveUserfunção. À medida que você adiciona mais funções, pode usar as setas para cima e para baixo para reorganizar a ordem de execução das funções. Revise suas alterações e escolha Salvar.

Etapa 4: Executando uma consulta

No AWS AppSync console, acesse a página Consultas. No explorador, verifique se você está usando a mutação. Se não estiver, escolha Mutation na lista suspensa e escolha +. Digite a consulta a seguir:

mutation { signUp(input: { email: "nadia@myvaliddomain.com" username: "nadia" }) { id email } }

Ela deve retornar algo semelhante a:

{ "data": { "signUp": { "id": "256b6cc2-4694-46f4-a55e-8cb14cc5d7fc", "email": "nadia@myvaliddomain.com" } } }

Cadastramos com sucesso nosso usuário e validamos o e-mail de entrada usando um resolvedor de pipeline. Para seguir um tutorial mais completo com foco em resolvedores de pipeline, você pode acessar Tutorial: Resolvedores de pipeline