Arquitecturas Avanzadas de GraphQL: Event Sourcing y CQRS sin servidor

Rate this content
Bookmark

GraphQL es una herramienta poderosa y útil, especialmente popular entre los desarrolladores frontend. Puede acelerar significativamente el desarrollo de aplicaciones y mejorar la velocidad de la aplicación, la descubribilidad de la API y la documentación. GraphQL no es solo adecuado para API simples, puede impulsar arquitecturas más avanzadas. La separación entre consultas y mutaciones hace que GraphQL sea perfecto para el event sourcing y Command Query Responsibility Segregation (CQRS). Al hacer que tu aplicación GraphQL avanzada sea sin servidor, obtienes una arquitectura completamente administrada, económica y extremadamente potente.

FAQ

GraphQL es una herramienta que permite solicitar datos específicos del servidor, el cual devuelve los datos en formato JSON. Permite definir la estructura de los datos solicitados, ofreciendo flexibilidad y eficiencia al permitir solicitudes personalizadas y limitadas a las necesidades específicas del cliente.

El mayor error de Mark Zuckerberg fue apostar demasiado por HTML5 para el desarrollo de aplicaciones móviles, lo que llevó a la decisión de reescribir la aplicación utilizando código nativo.

Serverless es un modelo de ejecución en la nube donde el proveedor de servicios maneja la gestión de la infraestructura. Permite ejecutar código en respuesta a eventos sin necesidad de gestionar servidores, escalando automáticamente y pagando solo por los recursos utilizados durante la ejecución.

La arquitectura serverless es ideal para aplicaciones basadas en eventos, escala automáticamente, reduce la necesidad de gestión de infraestructura y es coste-efectiva, ya que solo se paga por los recursos utilizados.

Event sourcing es un patrón de diseño que almacena todos los cambios en el estado de la aplicación como una secuencia de eventos. CQRS (Command Query Responsibility Segregation) es un patrón que separa la escritura de datos (comandos) de la lectura de datos (consultas), y se utiliza a menudo junto con event sourcing para mejorar la organización y el performance de las aplicaciones.

GraphQL se puede integrar con CQRS tratando las consultas de GraphQL como consultas y las mutaciones de GraphQL como comandos. Esto permite utilizar ambos patrones para mejorar la arquitectura y la eficiencia de las aplicaciones.

Los desafíos incluyen la gestión de la trazabilidad de eventos a través de múltiples servicios, la complejidad aumentada debido a la dependencia de varios servicios y la dificultad para mantener el seguimiento de estados y eventos en aplicaciones distribuidas.

Slobodan Stojanović
Slobodan Stojanović
28 min
02 Jun, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

GraphQL es un lenguaje de consulta sin versión y de tipo fuertemente tipado que te permite solicitar datos específicos y obtenerlos en formato JSON. Simplifica la recuperación y modificación de datos al permitir que el servidor maneje todas las operaciones necesarias. Las arquitecturas sin servidor, como AWS Lambda, son escalables, rentables y adecuadas para aplicaciones basadas en eventos. El event sourcing y CQRS son técnicas que garantizan la consistencia y separan las partes de lectura y escritura de una aplicación. La construcción de una API GraphQL con comandos y consultas se puede lograr utilizando AWS AppSync y DynamoDB. Este enfoque ofrece baja latencia, escalabilidad y admite múltiples lenguajes. Los desafíos incluyen la complejidad de la aplicación, el modelado de datos y el seguimiento, pero comenzar con simplicidad y hacer que algo funcione primero puede llevar al éxito.

1. Introducción a GraphQL y sus beneficios

Short description:

Hoy estoy aquí para contarles algunas historias. La primera historia es sobre GraphQL. Facebook construyó una aplicación móvil empaquetada dentro de una vista web con datos alimentados como HTML. Tenían problemas para servir datos, así que crearon GraphQL. Te permite solicitar datos específicos y obtenerlos en formato JSON. GraphQL es fuertemente tipado, tiene una jerarquía y proporciona documentación. No tiene versiones.

Es bueno que te diviertas. Estoy aquí para cambiar eso. Me encantan las historias, por supuesto, como a todos. No soy muy bueno contando historias. Pero afortunadamente, con la IA, puedo pedirle que finja ser algún escritor famoso o algo así y me ayude.

Pero hoy estoy aquí para contarles algunas historias. La primera historia es sobre GraphQL. Muchos de ustedes conocen GraphQL y muchos de ustedes conocen una aplicación llamada Facebook. Ahora probablemente sea utilizada principalmente por nuestros padres y cosas así. Pero en algún momento, la aplicación de Facebook construyó una aplicación móvil. Era solo una vista móvil de esa aplicación que estaba empaquetada dentro de la aplicación móvil como una vista web. Y en realidad alimentaron los data a esa aplicación como HTML. Por lo tanto, se renderizó en algún lugar en el servidor y se envió como un HTML completo a la aplicación.

Y luego, hace un poco más de 10 años, hubo un gran titular en todas partes en las noticias de front-end JavaScript que decía algo así como Mark Zuckerberg. Dijo que su mayor error en ese momento fue apostar demasiado por HTML5. Y luego decidieron reescribir su aplicación y construir una aplicación móvil real en ese momento con código nativo y todo. Pero su gran desafío era cómo servir data a esa aplicación. Intentaron usar REST, luego FQL que era Facebook Query Language o algo así. Y luego tuvieron un problema básicamente con las diferencias entre los data que querían presentar dentro de la aplicación y los data que devolvía el servidor.

Ahora eso probablemente no sea un gran problema porque nuestro Internet es mucho más rápido, pero en ese momento en lugar de simplemente obtener publicaciones y cosas así, obtener respuestas completas y hacer muchas solicitudes fue un poco problemático. Así que inventaron una herramienta genial llamada GraphQL donde básicamente puedes pedirle a tu servidor datos específicos y él puede darte los datos. Funciona así, defines los datos que quieres. Por ejemplo, quiero un usuario con IDs específicos pero no quiero todo sobre ese usuario, solo quiero algunas cosas específicas y quiero obtener una imagen con un tamaño específico y tal vez los primeros 5 amigos de esa persona y luego el servidor me dará JSON en el mismo formato, lo cual es increíble. Y otra cosa increíble sobre GraphQL es que se llama GraphQL y todavía se llama GraphQL. Lo genial es que defines la forma de esos datos, tienes una jerarquía que ayuda a GraphQL a saber qué datos cargar primero y cosas así, es fuertemente tipado lo que te ayuda a navegar por ese esquema y todo fácilmente. Es un protocolo, no realmente una forma diferente de escribir todo el back-end del servidor o lo que sea. Básicamente solo define las formas de los datos y las reglas por las que funciona. Y otra cosa genial fue que obtuviste documentación de inmediato con esa introspección del esquema, puedes preguntarle a GraphQL, oye, dime qué puedo consultar para un usuario y cosas así. Algo que no estoy seguro si es bueno o malo es que no tiene versiones. Básicamente no tiene versiones.

2. Introducción a los conceptos básicos de GraphQL

Short description:

Antes de GraphQL, las aplicaciones funcionaban enviando múltiples solicitudes para obtener diferentes datos. GraphQL te permite decirle al servidor qué datos quieres y el servidor se encargará de todas las operaciones necesarias para recuperar y devolver esos datos. Se utilizan tipos, esquemas y resolvers para definir y recuperar los datos. GraphQL admite consultas, mutaciones y suscripciones para la recuperación de datos, modificación y actualizaciones en tiempo real.

Es necesario ser compatible con versiones anteriores en un servidor porque el frontend puede solicitar cualquier cosa que esté disponible dentro de ese esquema. Antes de GraphQL, una aplicación funcionaba, y aún a menudo funcionan de tal manera que envían una solicitud, luego obtienen una respuesta, luego solicitan otra cosa utilizando algo de la primera respuesta y luego consultan la tercera cosa. Por ejemplo, quieres obtener usuarios de tu base de datos, pero luego quieres obtener sus imágenes de, digamos, Amazon S3 o algo así, y finalmente quieres obtener algunas analíticas de alguna tercera herramienta o algo así.

GraphQL básicamente hizo algo que teníamos antes de Ajax y todo eso, que es básicamente decirle al servidor lo que queremos. El servidor hará todas las cosas y te devolverá los datos, solo que no en HTML. Por lo tanto, los tipos son solo tipos. Defines qué campos tienes y cosas así. Luego defines el esquema. Por ejemplo, tengo algunas consultas aquí, y cada consulta define sus atributos y luego los valores de retorno y cosas así, y luego escribo algo llamado Resolver, que básicamente le dice a mi backend cómo obtener esos datos. El Resolver puede ser cualquier cosa básicamente. Puede leer los datos de una base de datos o consultar alguna API o lo que sea. Realmente no importa. Cuando escribes una consulta, GraphQL básicamente analiza esa consulta, valida que todo esté bien y, cuando todo está bien, ejecuta ese Resolver por nosotros, obtiene los datos, y luego empaqueta el resultado de la manera que queremos. GraphQL admite consultas, que es básicamente una forma de obtener los datos, mutaciones, que es una forma de cambiar algo en el lado del servidor, y suscripciones, que nos brindan actualizaciones y cosas así en tiempo real.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

De GraphQL Zero a GraphQL Hero con RedwoodJS
GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
De GraphQL Zero a GraphQL Hero con RedwoodJS
Top Content
Todos amamos GraphQL, pero puede ser desalentador poner en marcha un servidor y mantener tu código organizado, mantenible y testeable a largo plazo. ¡No más! Ven a ver cómo paso de un directorio vacío a una API GraphQL completamente desarrollada en cuestión de minutos. Además, verás lo fácil que es usar y crear directivas para limpiar aún más tu código. ¡Vas a amar aún más GraphQL una vez que hagas las cosas Redwood Easy!
Estado Local y Caché del Servidor: Encontrando un Equilibrio
Vue.js London Live 2021Vue.js London Live 2021
24 min
Estado Local y Caché del Servidor: Encontrando un Equilibrio
Top Content
¿Cuántas veces has implementado el mismo flujo en tu aplicación: verificar si los datos ya se han obtenido del servidor, si es así - renderizar los datos, si no - obtener estos datos y luego renderizarlos? Creo que lo he hecho más de diez veces yo mismo y he visto la pregunta sobre este flujo más de cincuenta veces. Desafortunadamente, nuestra biblioteca de gestión de estado predeterminada, Vuex, no proporciona ninguna solución para esto.Para la aplicación basada en GraphQL, había una alternativa para usar el cliente Apollo que proporcionaba herramientas para trabajar con la caché. Pero, ¿qué pasa si usas REST? Afortunadamente, ahora tenemos una alternativa de Vue a una biblioteca de react-query que proporciona una buena solución para trabajar con la caché del servidor. En esta charla, explicaré la distinción entre el estado de la aplicación local y la caché del servidor local y haré algo de codificación en vivo para mostrar cómo trabajar con este último.
Despídete de tus esquemas de API con tRPC
React Day Berlin 2022React Day Berlin 2022
29 min
Despídete de tus esquemas de API con tRPC
¿Sabías que podemos reemplazar los esquemas de API con una biblioteca liviana y segura? Con tRPC, puedes reemplazar fácilmente GraphQL o REST con formas inferidas sin esquemas ni generación de código. En esta charla, entenderemos los beneficios de tRPC y cómo aplicarlo en una aplicación de NextJs. Si quieres reducir la complejidad de tu proyecto, no te puedes perder esta charla.
No sabes cómo hacer SSR
DevOps.js Conf 2024DevOps.js Conf 2024
23 min
No sabes cómo hacer SSR
Un recorrido por la evolución del SSR en los últimos doce años. Cubriremos cómo han cambiado las técnicas, los problemas típicos, las herramientas que puedes utilizar y diversas soluciones, todo desde el punto de vista de mi experiencia personal como consumidor y mantenedor.
Baterías Incluidas Reimaginadas - El Resurgimiento de GraphQL Yoga
GraphQL Galaxy 2021GraphQL Galaxy 2021
33 min
Baterías Incluidas Reimaginadas - El Resurgimiento de GraphQL Yoga
El Guild ha lanzado recientemente Envelop - un nuevo y moderno Framework de Servidor GraphQL y sistema de plugins. En esta charla compartiré una breve descripción de Envelop y por qué probablemente deberías actualizar tu servidor GraphQL existente a él.
Aplicaciones sólidas de React y GraphQL para personas con prisa
GraphQL Galaxy 2022GraphQL Galaxy 2022
29 min
Aplicaciones sólidas de React y GraphQL para personas con prisa
En esta charla, veremos algunas de las opciones modernas para construir una aplicación full-stack de React y GraphQL con convenciones sólidas y cómo esto puede ser de enorme beneficio para ti y tu equipo. Nos enfocaremos específicamente en RedwoodJS, un framework full stack de React que a menudo se llama 'Ruby on Rails para React'.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Construir con SvelteKit y GraphQL
GraphQL Galaxy 2021GraphQL Galaxy 2021
140 min
Construir con SvelteKit y GraphQL
Top Content
Featured WorkshopFree
Scott Spence
Scott Spence
¿Alguna vez has pensado en construir algo que no requiera mucho código de plantilla con un tamaño de paquete pequeño? En esta masterclass, Scott Spence irá desde el hola mundo hasta cubrir el enrutamiento y el uso de endpoints en SvelteKit. Configurarás una API de GraphQL en el backend y luego usarás consultas de GraphQL con SvelteKit para mostrar los datos de la API de GraphQL. Construirás un proyecto rápido y seguro que utiliza las características de SvelteKit, y luego lo desplegarás como un sitio completamente estático. Este curso es para los curiosos de Svelte que no han tenido una experiencia extensa con SvelteKit y quieren una comprensión más profunda de cómo usarlo en aplicaciones prácticas.

Tabla de contenidos:
- Inicio e introducción a Svelte
- Inicializar el proyecto frontend
- Recorrido por el proyecto esqueleto de SvelteKit
- Configurar el proyecto backend
- Consultar datos con GraphQL
- Recuperación de datos en el frontend con GraphQL
- Estilización
- Directivas de Svelte
- Enrutamiento en SvelteKit
- Endpoints en SvelteKit
- Despliegue en Netlify
- Navegación
- Mutaciones en GraphCMS
- Envío de mutaciones GraphQL a través de SvelteKit
- Preguntas y respuestas
IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
Seguridad de tipo de extremo a extremo con React, GraphQL y Prisma
React Advanced Conference 2022React Advanced Conference 2022
95 min
Seguridad de tipo de extremo a extremo con React, GraphQL y Prisma
Featured WorkshopFree
Sabin Adams
Sabin Adams
En este masterclass, obtendrás una visión de primera mano de lo que es la seguridad de tipo de extremo a extremo y por qué es importante. Para lograr esto, construirás una API de GraphQL utilizando herramientas modernas y relevantes que serán consumidas por un cliente de React.
Prerrequisitos: - Node.js instalado en tu máquina (12.2.X / 14.X)- Se recomienda (pero no es obligatorio) utilizar VS Code para las tareas prácticas- Un IDE instalado (se recomienda VSCode)- (Bueno tener) *Un conocimiento básico de Node.js, React y TypeScript
GraphQL para Desarrolladores de React
GraphQL Galaxy 2022GraphQL Galaxy 2022
112 min
GraphQL para Desarrolladores de React
Featured Workshop
Roy Derks
Roy Derks
Hay muchas ventajas en utilizar GraphQL como fuente de datos para el desarrollo frontend, en comparación con las API REST. Nosotros, los desarrolladores, por ejemplo, necesitamos escribir mucho código imperativo para recuperar datos y mostrarlos en nuestras aplicaciones y manejar el estado. Con GraphQL, no solo puedes reducir la cantidad de código necesario para la obtención de datos y la gestión del estado, sino que también obtendrás una mayor flexibilidad, mejor rendimiento y, sobre todo, una mejor experiencia de desarrollo. En este masterclass aprenderás cómo GraphQL puede mejorar tu trabajo como desarrollador frontend y cómo manejar GraphQL en tu aplicación frontend de React.
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
React Summit 2022React Summit 2022
173 min
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
Top Content
WorkshopFree
Kellen Mace
Kellen Mace
En esta masterclass, aprenderás cómo construir una aplicación Next.js que utiliza Apollo Client para obtener datos de un backend de WordPress sin cabeza y usarlo para renderizar las páginas de tu aplicación. Aprenderás cuándo debes considerar una arquitectura de WordPress sin cabeza, cómo convertir un backend de WordPress en un servidor GraphQL, cómo componer consultas usando el IDE GraphiQL, cómo colocar fragmentos GraphQL con tus componentes, y más.