|
A partir de hoy, AWS AppSync admite resoluciones de JavaScript y proporciona un motor de evaluación de resolución para probarlas antes de publicarlas en la nube.
AWS AppSynclanzado en 2017, es un servicio que le permite crear, administrar y alojar API de GraphQL en la nube. AWS AppSync conecta su esquema GraphQL a diferentes fuentes de datos mediante resolutores. Los resolutores son cómo AWS AppSync traduce las solicitudes de GraphQL y obtiene información de las diferentes fuentes de datos.
Hasta hoy, muchos clientes tenían que escribir sus resolutores usando Apache Velocity Template Language (VTL). Para escribir resolutores de VTL, muchos desarrolladores necesitaban aprender un nuevo lenguaje y eso los desalentó de aprovechar las capacidades que ofrecen los resolutores. Y cuando los escribieron, los desarrolladores enfrentaron el desafío de cómo probar los resolutores de VTL. Es por eso que muchos clientes recurrieron a escribir sus resoluciones complejas como funciones de AWS Lambda y luego crearon una resolución de VTL simple que invocaba esa función. Esto agrega más complejidad a sus aplicaciones, ya que ahora tienen que mantener y operar esta nueva función de Lambda.
AWS AppSync ejecuta resolutores en un campo GraphQL. A veces, las aplicaciones requieren la ejecución de múltiples operaciones para resolver un solo campo de GraphQL. Cuando usas AWS AppSync, los desarrolladores pueden crear resolutores de canalización para componer operaciones (llamadas funciones) y ejecutarlas en secuencia. Cada función realiza una operación sobre una fuente de datos, por ejemplo, obtener un elemento de una tabla de Amazon DynamoDB.
Introduciendo AWS AppSync Resolutores de canalización de JavaScript
Ahora, además de VTL, los desarrolladores pueden usar JavaScript para escribir sus funciones. Puede mezclar funciones escritas en JavaScript y VTL dentro de una resolución de canalización.
Este nuevo lanzamiento viene con dos nuevas bibliotecas NPM para simplificar el desarrollo: @aws-appsync/eslint-plugin
para detectar y solucionar problemas rápidamente durante el desarrollo y @aws-appsync/utils
para proporcionar validación de tipos y autocompletado en editores de código.
Los desarrolladores pueden probar su código JavaScript usando AWS AppSyncnuevo comando de API, evaluate-code
. Durante una prueba, se valida la corrección del código y se evalúa con datos simulados. Esto ayuda a los desarrolladores a validar su código antes de enviar sus cambios a la nube.
Con este lanzamiento, AWS AppSync se convierte en una de las formas más fáciles para que sus aplicaciones se comuniquen con casi cualquier servicio de AWS. Puede escribir una función HTTP que llame a cualquier servicio de AWS con un punto de enlace de API utilizando JavaScript y usar esa función como parte de su canalización. Por ejemplo, puede crear una resolución de canalización que se invoque cuando se produzca una consulta en un campo de GraphQL. Este campo devuelve el texto traducido al español de un elemento almacenado en una tabla. Este solucionador de canalización se compone de dos funciones, una que obtiene datos de una tabla de DynamoDB y otra que utiliza la API de Amazon Translate para traducir el texto del elemento al español.
function awsTranslateRequest(Text, SourceLanguageCode, SourceLanguageCode) { return { method: 'POST', resourcePath: '/', params: { headers: { 'content-type': 'application/x-amz-json-1.1', 'x-amz-target': 'AWSShineFrontendService_20170701.TranslateText', }, body: JSON.stringify({ Text, SourceLanguageCode, SourceLanguageCode }), }, }; }
Empezando
Puede crear funciones de JavaScript desde el AWS AppSync consola o mediante la interfaz de línea de comandos (CLI) de AWS. Vamos a crear una resolución de canalización que obtenga un elemento de una tabla de DynamoDB existente mediante la AWS CLI. Este resolver solo tiene una función.
Al crear un nuevo AWS AppSync función, debe proporcionar el código para esa función. Cree un nuevo archivo JavaScript y copie el siguiente fragmento de código.
import { util } from '@aws-appsync/utils';
/**
* Request a single item from the attached DynamoDB table
* @param ctx the request context
*/
export function request(ctx) {
return {
operation: 'GetItem',
key: util.dynamodb.toMapValues({ id: ctx.args.id }),
};
}
/**
* Returns the DynamoDB result directly
* @param ctx the request context
*/
export function response(ctx) {
return ctx.result;
}
Todas las funciones deben tener un solicitud y respuesta método, y en cada uno de estos métodos, puede realizar las operaciones para satisfacer la necesidad empresarial.
Para comenzar, primero asegúrese de tener la última versión de la CLI de AWS, que haya creado una tabla de DynamoDB y que tenga un AWS AppSync API. Entonces puedes crear la función en AWS AppSync utilizando el comando create-function de la AWS CLI y el archivo que acaba de crear. Este comando devuelve el ID de la función. Para crear el resolver, pase el ID de la función, la operación de GraphQL y el campo donde desea aplicar el resolvedor. En la documentación, puede encontrar un tutorial detallado sobre cómo crear resolutores de canalización.
Probando un resolutor
Para probar una función, utilice el evaluate-code
Comando de AWS CLI o AWS SDK. Este comando llama al AWS AppSync servicio y evalúa el código con el contexto proporcionado. Para automatizar la prueba, puede usar cualquier biblioteca de aserción y prueba de JavaScript. Por ejemplo, el siguiente fragmento de código utiliza Broma para validar los resultados devueltos mediante programación.
import * as AWS from 'aws-sdk'
import { readFile } from 'fs/promises'
const appsync = new AWS.AppSync({ region: 'us-east-2' })
const file="./functions/updateItem.js"
test('validate an update request', async () => {
const context = JSON.stringify({
arguments: {
input: { id: '<my-id>', title: 'change!', description: null },
},
})
const code = await readFile(file, { encoding: 'utf8' })
const runtime = { name: 'APPSYNC_JS', runtimeVersion: '1.0.0' }
const params = { context, code, runtime, function: 'request' }
const response = await appsync.evaluateCode(params).promise()
expect(response.error).toBeUndefined()
expect(response.evaluationResult).toBeDefined()
const result = JSON.parse(response.evaluationResult)
expect(result.key.id.S).toEqual(context.arguments.input.id)
expect(result.update.expressionNames).not.toHaveProperty('#id')
expect(result.update.expressionNames).toHaveProperty('#title')
expect(result.update.expressionNames).toHaveProperty('#description')
expect(result.update.expressionValues).not.toHaveProperty(':description')
})
De esta forma, puede agregar sus pruebas de API a su proceso de compilación y validar que codificó los resolutores correctamente antes de enviar los cambios a la nube.
Empiece hoy
La compatibilidad con los solucionadores JavaScript de AWS AppSync en AWS AppSync está disponible para todas las regiones que actualmente admiten AWS AppSync. Puede comenzar a usar esta característica hoy desde la Consola de administración de AWS, la CLI de AWS o Amazon CloudFormation.
Obtenga más información sobre este lanzamiento visitando la página del servicio de AWS AppSync.
— Marcia