Construcción de API GraphQL en tiempo real con AWS AppSync - Diseño de suscripciones y resolvers
Presenta patrones de diseño para lograr notificaciones en tiempo real con suscripciones basadas en WebSocket e integrar múltiples fuentes de datos con pipeline resolvers de DynamoDB y Lambda.
Diferenciación entre AppSync y REST API
AppSync es el servicio GraphQL administrado de AWS que procesa hasta miles de solicitudes por segundo y soporta hasta 100,000 conexiones simultáneas vía WebSocket. Mientras que con REST API es necesario llamar a múltiples endpoints para ensamblar los datos necesarios, con GraphQL se pueden obtener solo los campos requeridos con una única consulta. Es especialmente efectivo en entornos con ancho de banda limitado como aplicaciones móviles, o en dashboards que obtienen datos de múltiples fuentes. Por otro lado, para CRUD simple o APIs públicas para terceros, la configuración REST con API Gateway + Lambda es más sencilla. AppSync demuestra su potencia en aplicaciones que requieren actualizaciones en tiempo real, patrones complejos de obtención de datos y escenarios donde los equipos de frontend demandan flexibilidad en la API.
Suscripciones en tiempo real
Las suscripciones de AppSync operan sobre WebSocket y envían datos a los clientes usando la ejecución de Mutations como trigger. Basta con definir el tipo Subscription en el esquema y especificar la Mutation objetivo con la directiva @aws_subscribe para habilitar las notificaciones en tiempo real. En una aplicación de chat, cuando se ejecuta una Mutation de nuevo mensaje, este se distribuye instantáneamente a todos los clientes suscritos a la misma sala de chat. El filtrado de suscripciones permite que los clientes reciban solo los cambios de datos relevantes para ellos. La gestión de conexiones la realiza AppSync automáticamente, por lo que no es necesario operar un servidor WebSocket.
Diseño de resolvers e integración de fuentes de datos
Los resolvers son componentes que conectan los campos de GraphQL con las fuentes de datos. Los resolvers de DynamoDB escriben plantillas de mapeo en VTL (Velocity Template Language) o JavaScript y ejecutan operaciones de DynamoDB como GetItem, PutItem, Query y Scan. Los pipeline resolvers ejecutan múltiples funciones en serie, pudiendo pasar el resultado de una función a la siguiente. Por ejemplo, es posible una configuración donde la primera función obtiene información del usuario de DynamoDB y la siguiente función obtiene el historial de pedidos de ese usuario de otra tabla. Es efectivo usar resolvers Lambda para lógica de negocio compleja o llamadas a APIs externas, y resolvers DynamoDB para CRUD simple. Para explicaciones detalladas sobre AppSync, también puedes consultar libros relacionados en Amazon.
Precios de AppSync
Los precios de AppSync se componen del número de ejecuciones de queries/mutations y actualizaciones en tiempo real. Las queries y mutations cuestan aproximadamente 4.00 dólares por millón de solicitudes, y las actualizaciones en tiempo real (suscripciones) se cobran a aproximadamente 2.00 dólares por millón de minutos de conexión más el volumen de transferencia de datos. Habilitar el caché agrega un cargo por hora de la instancia de caché (aproximadamente 0.028 dólares/hora para t2.small), pero puede reducir el costo total en cargas de trabajo con muchas lecturas al reducir las llamadas a DynamoDB o Lambda. Comparado con la configuración REST de API Gateway + Lambda, el precio por solicitud es más alto, pero considerando la reducción de llamadas al backend por la eliminación del problema N+1, AppSync puede ser más eficiente en costos para patrones complejos de obtención de datos.
Resumen
AppSync es un servicio GraphQL óptimo para aplicaciones que requieren actualizaciones en tiempo real y obtención flexible de datos. Logra notificaciones en tiempo real con suscripciones basadas en WebSocket e integra múltiples fuentes de datos como DynamoDB, Lambda y RDS con pipeline resolvers. También proporciona control de acceso granular mediante multi-autenticación de forma administrada.