Construcción de API GraphQL en tiempo real con AWS AppSync - Diseño de suscripciones y resolvers

Presentamos patrones de diseño que logran notificaciones en tiempo real con suscripciones basadas en WebSocket e integran varias fuentes de datos con pipeline resolvers de DynamoDB / Lambda.

Cuándo usar AppSync y cuándo API REST

AppSync es el servicio GraphQL administrado de AWS, que procesa hasta varios miles de solicitudes por segundo y admite hasta 100,000 conexiones simultáneas mediante WebSocket. Con las API REST es necesario llamar a varios endpoints y armar los datos necesarios, pero con GraphQL se pueden obtener solo los campos necesarios con una única consulta. Es adecuado para entornos con ancho de banda limitado, como las aplicaciones móviles, y para paneles que obtienen datos de varias fuentes de datos de forma transversal. Por otro lado, para un CRUD simple o una API pública para terceros, la configuración REST con API Gateway + Lambda es más sencilla. AppSync es adecuado para aplicaciones que necesitan actualizaciones en tiempo real, patrones complejos de obtención de datos y situaciones en las que el equipo de frontend busca flexibilidad en la API.

Suscripciones en tiempo real

Las suscripciones de AppSync funcionan sobre WebSocket y envían datos a los clientes cuando se ejecuta una Mutation. Para configurar las notificaciones en tiempo real, se define un tipo Subscription en el esquema y se especifica la Mutation de destino con la directiva @aws_subscribe. En una aplicación de chat, cuando se ejecuta la Mutation de un mensaje nuevo, el mensaje se entrega a todos los clientes suscritos a la misma sala de chat. Con el filtrado de suscripciones, los clientes pueden recibir solo los cambios de datos que les afectan. AppSync gestiona las conexiones automáticamente, por lo que no es necesario operar servidores WebSocket.

Diseño de resolvers e integración de fuentes de datos

Un resolver es el componente que conecta un campo de GraphQL con una fuente de datos. Los resolvers de DynamoDB describen 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 varias funciones en serie y pueden pasar el resultado de la función anterior a la siguiente. Por ejemplo, es posible una configuración en la que la primera función obtiene la información del usuario desde DynamoDB y la siguiente obtiene el historial de pedidos de ese usuario desde otra tabla. Una forma de repartir los usos es emplear los resolvers de Lambda para procesos con lógica de negocio compleja o llamadas a API externas, y los resolvers de DynamoDB para un CRUD simple.

Precios de AppSync

El precio de AppSync se compone del número de ejecuciones de consultas / mutaciones y de las actualizaciones en tiempo real. Las consultas y mutaciones cuestan aproximadamente 4.00 USD por millón de solicitudes, y las actualizaciones en tiempo real (suscripciones) aproximadamente 2.00 USD por millón de actualizaciones, a lo que se suman los cargos por tiempo de conexión y volumen de transferencia de datos (a fecha de agosto de 2026). Si se habilita la caché, se añade un cargo por hora de la instancia de caché (aproximadamente 0.028 USD/hora con t2.small), pero como se puede reducir el número de llamadas a DynamoDB y Lambda, el coste total puede bajar en cargas de trabajo con muchas lecturas. Al comparar el coste con la configuración REST de API Gateway + Lambda, se tiene en cuenta, además del precio por solicitud, el número de llamadas al backend que se reduce al resolver el problema N+1.

Fundamentos del diseño del esquema

El diseño de una API GraphQL empieza por definir el esquema. El esquema declara los tipos de datos que se manejan y las operaciones que pueden ejecutar los clientes, y se convierte en la propia especificación de la API. Se definen las consultas que obtienen datos, las mutaciones que realizan cambios y las suscripciones que reciben los cambios en tiempo real. Si se diseña bien el esquema desde el principio, los desarrolladores del cliente y del servidor pueden trabajar en paralelo a partir de una especificación común. Obtener exactamente los datos que se usan, ni más ni menos, es una característica de GraphQL, y el diseño del esquema es su requisito previo.

Tipos de resolvers y su diseño

Un resolver vincula una operación definida en el esquema con el procesamiento en la fuente de datos real. Para un procesamiento simple sobre una sola fuente de datos, se usa un resolver unitario. Cuando se llama a varias fuentes de datos en orden o se combinan procesos, se usa un resolver de tipo pipeline que encadena varios pasos. Así se pueden integrar varios datos relacionados y devolverlos en una sola solicitud. Algunas fuentes de datos también tienen mecanismos que se integran directamente desde el resolver, lo que permite omitir código adicional. La configuración del resolver se elige según la complejidad de la operación.

Modos de autenticación / autorización

AppSync admite varios métodos de autenticación, y puede elegir según el uso de la API. Hay métodos que se integran con la plataforma de autenticación de los usuarios, métodos que usan el sistema de permisos de AWS, métodos basados en una clave sencilla y métodos que incorporan una lógica de autenticación propia, entre otros. Además, la autorización se puede controlar por campo, lo que permite un control detallado, como mostrar ciertos datos solo a ciertos grupos de usuarios. También se pueden combinar varios métodos de autenticación y usar cada uno para un fin distinto. Quién puede acceder a qué datos se decide en la fase de diseño de la API.

Soporte sin conexión y resolución de conflictos

En las aplicaciones que se usan en entornos con una red inestable, como las aplicaciones móviles, el comportamiento sin conexión se incluye en el diseño. AppSync ofrece un mecanismo que permite trabajar con los datos de forma local incluso sin conexión y sincronizarlos con el servidor cuando se recupera la conexión. En ese momento, si varios usuarios han modificado los mismos datos, los cambios pueden entrar en conflicto. Si se diseña de antemano cómo resolver los conflictos, por ejemplo qué cambio tiene prioridad, se puede mantener la coherencia de los datos. Se incorporan el soporte sin conexión y la resolución de conflictos para que la aplicación se pueda usar cuando la comunicación es inestable.

Resumen

AppSync es un servicio GraphQL adecuado para aplicaciones que requieren actualizaciones en tiempo real y una obtención de datos flexible. Logra notificaciones en tiempo real con suscripciones basadas en WebSocket e integra varias fuentes de datos, como DynamoDB, Lambda y RDS, con pipeline resolvers. También ofrece de forma administrada un control de acceso detallado mediante varios modos de autenticación.

Referencias (recursos oficiales de AWS)

Las fuentes primarias de esta página son el sitio web y la documentación oficiales de AWS. Consulta las páginas oficiales siguientes para conocer las especificaciones y los precios más recientes.

Si esta página y la documentación oficial difieren, prevalece la documentación oficial.

Compartir