avatar Artículo

Comenzando con AWS AppSync: Un Enfoque Práctico para GraphQL

Este artículo te guía a través de los fundamentos de AWS AppSync, guiándote en el proceso de configuración, desarrollo y despliegue de una API GraphQL.

AWS AppSync

Aprende AWS AppSync para APIs GraphQL con suscripciones en tiempo real, integración de fuentes de datos y capacidades offline.

2 articles

In progress
Comenzando con AWS AppSync: Un Enfoque Práctico para GraphQL

1. Introducción a GraphQL y AWS AppSync

En el panorama en constante evolución del desarrollo de aplicaciones web y móviles, la eficiencia y las capacidades en tiempo real no son solo características deseables, son esenciales. Aquí es donde entran en juego GraphQL y AWS AppSync, ofreciendo a los desarrolladores las herramientas para construir aplicaciones dinámicas y escalables con facilidad.

GraphQL, desarrollado internamente por Facebook en 2012 y lanzado públicamente en 2015, es un lenguaje de consulta para APIs y un runtime para ejecutar consultas usando un sistema de tipos definido para tus datos. A diferencia de las APIs REST tradicionales que requieren cargar desde múltiples URLs, las APIs GraphQL obtienen todos los datos que tu aplicación necesita en una sola solicitud, asegurando eficiencia incluso en conexiones de red móvil lentas.

AWS AppSync es el GraphQL de AWS. Es un servicio gestionado que simplifica el desarrollo de aplicaciones al crear APIs GraphQL y Pub/Sub serverless. Proporciona un único endpoint para consultar, actualizar o publicar datos de forma segura, permitiendo a los desarrolladores construir aplicaciones interactivas y ricas en características.

1.1. Características Clave de GraphQL

  • Recuperación eficiente de datos: Los clientes pueden solicitar exactamente lo que necesitan, ni más ni menos. Esto elimina los problemas de sobre-obtención y sub-obtención comúnmente encontrados en APIs REST.
  • Único endpoint: Las APIs GraphQL usan un único endpoint para manejar consultas, mutaciones (cambio de datos) y suscripciones (actualizaciones en tiempo real), simplificando el proceso de obtención de datos.
  • Fuertemente tipado: El servicio define un conjunto de tipos que describe completamente el conjunto de datos posibles que puedes consultar, permitiendo introspección para documentación y propósitos de validación.
  • Datos en tiempo real con suscripciones: GraphQL soporta actualizaciones en tiempo real a través de suscripciones, permitiendo actualizaciones en vivo al cliente a medida que los datos cambian.
  • Obtención declarativa de datos: Los clientes describen sus requisitos de datos como lo que necesitan, en lugar de cómo obtenerlo. Esto permite un enfoque más declarativo para la obtención de datos y separación de preocupaciones entre cliente y servidor.

1.2. Operaciones GraphQL

Tenemos 3 operaciones diferentes en GraphQL:

  • Query: Usado para recuperar datos, como una solicitud GET.
  • Mutation: Usado para modificar datos, como CREATE, UPDATE o DELETE.
  • Subscription: Usado para suscribirse a cambios de datos y recibir notificaciones en tiempo real.

1.3. ¿Por Qué Elegir AWS AppSync

AWS AppSync va más allá de ofrecer características estándar de GraphQL al integrarse profundamente con el ecosistema AWS, proporcionando:

  • Datos en tiempo real: Soporta suscripciones para actualizaciones de datos en tiempo real a clientes de aplicaciones.
  • Soporte offline: Ofrece capacidades integradas para acceso a datos offline y sincronización, mejorando la confiabilidad de la aplicación y la experiencia del usuario.
  • Integración directa con una o más fuentes: Se conecta sin problemas con almacenes de datos NoSQL, bases de datos relacionales, APIs HTTP y más, permitiendo patrones complejos de agregación y acceso a datos.
  • Control de acceso de grano fino: Permite controles de acceso precisos, integrándose con AWS IAM y Amazon Cognito para mecanismos completos de autenticación y autorización.

1.4. Casos de Uso

  • Crear una API Pub/Sub simple
  • Crear instantáneamente APIs para tus bases de datos
  • Combinar múltiples fuentes de datos en una única API GraphQL
  • Aplicaciones Colaborativas en Tiempo Real
  • Aplicaciones Móviles y Web Basadas en Datos
  • Aplicaciones IoT y de Datos en Streaming

1.5. Ejemplo: Arquitectura de referencia BFF de AWS

Enlace original aquí

Arquitectura de referencia BFF

1.6. Componentes de una API GraphQL

Arquitectura API GraphQL

Hay 3 componentes principales en una API GraphQL:

  • Schemas: Es una puerta de enlace que maneja todas las solicitudes hechas al servidor. Cuando se hace una solicitud, el schema actúa como el único endpoint que interactúa con el cliente. El schema accederá, procesará y retransmitirá datos desde la fuente de datos de vuelta al cliente. Más detalles aquí.
  • Data sources: DynamoDB, Lambda, OpenSearch, endpoints HTTP, EventBridge, bases de datos relacionales o fuente de datos None. Más información aquí.
  • Resolvers: Una unidad de código que maneja cómo se resolverán los datos de ese campo cuando se hace una solicitud al servicio. Más información aquí.

Diagrama de flujo

2. Demo: Configurando tu Primera API GraphQL con AWS AppSync

2.1. Creando la API GraphQL más simple

Probaremos el enfoque más simple, conectando una tabla DynamoDB, siguiendo los siguientes pasos:

Usaré la Consola de AWS para mostrarte el paso a paso, pero si prefieres crear el servicio AWS AppSync usando Terraform puedes revisar el código aquí.

  1. Crear una Nueva API: Elige “Create API” y selecciona la opción “Start with a DynamoDB table” para este tutorial. Crear API paso 1
  2. Especificar detalles de la API: Actualiza toda la información aquí, incluyendo “Import from DynamoDB table”. Usaré mi tabla DynamoDB en el formulario de feedback de mi blog.

    Crear API paso 2

  3. Especificar recursos GraphQL: Tenemos que incluir todos los campos opcionales en nuestra tabla DynamoDB. Crear API paso 3
  4. Crear API: Finalmente, creamos la nueva API GraphQL.

Por defecto, la API GraphQL ha sido creada con todas las operaciones habilitadas: queries, mutations y subscriptions. Podemos personalizarla cambiando el Schema.

En la sección Queries, podemos probar nuestra API. Podemos ejecutar Queries, Mutation o Subscription (todas las operaciones fueron creadas automáticamente). En el siguiente ejemplo, consultaremos todos los datos:

Consultar tabla

El último paso es conectar nuestro cliente con la API. Aquí encontrarás más información al respecto.

2.2. Actualizando la API para solo consultar datos

Ahora, actualizaremos nuestro Schema para solo permitir consultar datos.

Podemos usar el siguiente schema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
type Query {
  getFeedback(type: String!, date: String!): feedback
  listFeedbacks(filter: TableFeedbackFilterInput, limit: Int, nextToken: String): feedbackConnection
}

type feedback {
  date: String!
  type: String!
  email: String
  message: String!
  name: String
  rating: String
}

input TableFeedbackFilterInput {
  date: TableStringFilterInput
  type: TableStringFilterInput
  email: TableStringFilterInput
  message: TableStringFilterInput
  name: TableStringFilterInput
  rating: TableStringFilterInput
}

input TableStringFilterInput {
  ne: String
  eq: String
  le: String
  lt: String
  ge: String
  gt: String
  contains: String
  notContains: String
  between: [String]
  beginsWith: String
  attributeExists: Boolean
}

type feedbackConnection {
  items: [feedback]
  nextToken: String
}

Consultar tabla simplificada

3. Conclusión

AWS AppSync ayuda a los desarrolladores a crear aplicaciones eficientes, escalables e interactivas con facilidad. Para simplificarlo, puedes crear un único endpoint que te permite:

  • integrar directamente con la fuente recuperando solo los datos deseados
  • recibir actualizaciones en tiempo real
Este artículo está licenciado bajo CC BY 4.0 por el autor.