Solucionadores de canalización (JavaScript) - AWS AppSync

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Solucionadores de canalización (JavaScript)

AWS AppSync ejecuta solucionadores en un campo de GraphQL. En algunos casos, las aplicaciones requieren la ejecución de varias operaciones para resolver un único campo de GraphQL. Con los solucionadores de canalización, los desarrolladores ahora pueden componer operaciones llamadas Funciones y ejecutarlas de forma secuencial. Los solucionadores de canalización son útiles para las aplicaciones que, por ejemplo, requieren realizar una comprobación de autorización antes de recuperar datos para un campo.

Para obtener más información sobre la arquitectura de un solucionador de canalización de JavaScript, consulte la Descripción general de los solucionadores de JavaScript.

Crear un solucionador de canalización

En la consola de AWS AppSync, vaya a la página Esquema.

Guarde el siguiente 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 a conectar un solucionador de canalización al campo signUp en el tipo Mutation (Mutación). En el tipo Mutación en el lado derecho, elija Asociar junto al campo de mutación signUp. Configura el solucionador en pipeline resolver y el tiempo de ejecución en APPSYNC_JS y, a continuación, crea el solucionador.

Nuestro solucionador de canalización inicia sesión a un usuario. Para ello, primero valida la entrada de dirección de correo electrónico y, a continuación, guarda al usuario en el sistema. Vamos a encapsular la validación de correo electrónico dentro de una función validateEmail y el guardado del usuario dentro de una función saveUser. La función validateEmail se ejecuta en primer lugar y, si el correo electrónico es válido, se ejecuta la función saveUser.

El flujo de ejecución será como se indica a continuación:

  1. Controlador de solicitudes de solucionador Mutation.signUp

  2. Función validateEmail

  3. Función saveUser

  4. Controlador de respuestas de solucionador Mutation.signup

Dado que probablemente reutilizaremos la función validateEmail en otros solucionadores de nuestra API, queremos para evitar el acceso a ctx.args, ya que estos cambiarán de un campo GraphQL a otro. En su lugar, podemos utilizar ctx.stash para almacenar el atributo de correo electrónico desde el argumento de campo de entrada signUp(input: Signup).

Actualice su código de solucionador sustituyendo sus funciones de solicitud y respuesta:

export function request(ctx) { ctx.stash.email = ctx.args.input.email return {}; } export function response(ctx) { return ctx.prev.result; }

Seleccione Crear o Guardar para actualizar el solucionador.

Crear una función

En la página del solucionador de canalización, en la sección Funciones, haga clic en Agregar función y luego en Crear la función nueva. También es posible crear funciones sin tener que recurrir a la página del solucionador; para ello, en la consola de AWS AppSync, vaya a la página Funciones. Elija el botón Create a function (Crear una función). Vamos a crear una función que comprueba si un mensaje de correo electrónico es válido y proviene de un dominio específico. Si el correo electrónico no es válido, la función genera un error. De lo contrario, reenvía cualquier entrada.

Asegúrese de haber creado un origen de datos del tipo NINGUNO. Elija este origen de datos en la lista de Nombre del origen de datos. Para el nombre de a función, escriba validateEmail. En el área de código de la función, sobrescriba todo con este fragmento:

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { email } = ctx.stash; const valid = util.matches( '^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com', email ); if (!valid) { util.error(`"${email}" is not a valid email.`); } return { payload: { email } }; } export function response(ctx) { return ctx.result; }

Revise la información indicada y, a continuación, seleccione Crear. Acabamos de crear nuestra función validateEmail. Repita estos pasos para crear la función SaveUser con el siguiente código (para simplificar, utilizamos un origen de datos NINGUNO y simulamos que el usuario se ha guardado en el sistema después de ejecutar la función):

import { util } from '@aws-appsync/utils'; export function request(ctx) { return ctx.prev.result; } export function response(ctx) { ctx.result.id = util.autoId(); return ctx.result; }

Acabamos de crear la función saveUser.

Adición de una función a un solucionador de canalización

Nuestras funciones deberían haberse agregado automáticamente al solucionador de canalización que acabamos de crear. Si este no es el caso, o si ha creado las funciones a través de la página Funciones, puede volver a hacer clic en Agregar función en la página signUp del solucionador para asociarlas. Agregue las funciones validateEmail y saveUser al solucionador. La función validateEmail se debe colocar antes de la función saveUser. A medida que agrega más funciones, puede utilizar las opciones mover hacia arriba y mover hacia abajo para reorganizar el orden de ejecución de las funciones. Revise sus cambios y, a continuación, elija Guardar.

Ejecutar una consulta

En la consola de AWS AppSync, vaya a la página Consultas. En el explorador, asegúrese de utilizar la mutación. Si no es así, seleccione Mutation en la lista desplegable y, a continuación, elija +. Escriba la siguiente consulta:

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

Debería devolver algo parecido a esto:

{ "data": { "signUp": { "id": "256b6cc2-4694-46f4-a55e-8cb14cc5d7fc", "username": "nadia" } } }

Hemos registrado correctamente nuestro usuario y validado el correo electrónico de entrada utilizando un solucionador de canalización.