GraphQL con Mercurius y Prisma, amor a primera vista

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

En esta charla, hablaré sobre los beneficios de usar GraphQL y mostraré una pequeña demostración de un punto final creado con Fastify Mercurius y Prisma.

This talk has been presented at Node Congress 2023, check out the latest edition of this JavaScript Conference.

FAQ

Luca Del Pupo es un desarrollador italiano de FoodStack, especializado en JavaScript y TypeScript. Además, crea contenido en su canal de YouTube y disfruta correr y hacer senderismo.

Luca decidió hacer el cambio debido a la necesidad de mejorar la flexibilidad de la API para adaptarse a diversos dispositivos como smartphones y smart TVs, utilizando GraphQL para dar más poder al cliente.

Luca utiliza Mercurius, basado en Fastify, para la implementación de GraphQL debido a su facilidad de uso y su buena integración con TypeScript, junto con Prisma para la gestión de la base de datos.

Mercurius facilita la creación de servidores GraphQL de manera sencilla y eficiente, mientras que Prisma ofrece una experiencia de desarrollo mejorada, fácil mantenimiento y una buena modelización de datos.

Luca eligió tecnologías que ofrecieran una base de código fácil de mantener, que apoyaran el desarrollo diario, y que permitieran a los desarrolladores centrarse en el negocio más que en resolver problemas de framework.

Utilizando Mercurius Code Gen para convertir archivos JQL en definiciones de TypeScript, Luca garantiza que las operaciones en su servidor GraphQL sean seguras y estén bien definidas, previniendo problemas antes de la producción.

Luca Del Puppo
Luca Del Puppo
34 min
14 Apr, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla discute el uso de Prisma y Mercurius para pasar de una API REST a GraphQL. Prisma mejora la experiencia del desarrollador y permite modelar datos fácilmente y realizar consultas seguras en cuanto a tipos. Mercurius es fácil de aprender si ya conoces Fastify y ofrece un servidor GraphQL de alto rendimiento. Fastify es preferido sobre Express por su comunidad activa y buen rendimiento. La pila ideal para Node.js incluye Fastify para API REST y GraphQL, Prisma para la base de datos y el proveedor predeterminado como MongoDB.

1. Introducción a Prisma y Mercurius

Short description:

Hoy hablaré sobre Prisma con Mercurius y nuestra experiencia al pasar de una API REST a GraphQL. Durante los últimos 10 años, he trabajado principalmente con API REST, las cuales han funcionado bien para navegadores y aplicaciones de escritorio. Sin embargo, con el surgimiento de otros dispositivos como smartphones y smart TVs, necesitábamos mejorar la flexibilidad de nuestra API. Esto nos llevó a explorar el potencial de GraphQL. Trabajando con empresas pequeñas y medianas, identificamos la necesidad de un framework fácil de mantener que brinde soporte a desarrolladores junior y intermedios, al mismo tiempo que permita a los desarrolladores senior enfocarse en la lógica de negocio. Con estos requisitos, elegimos utilizar Mercurius para la parte de GraphQL y Prisma para el acceso a datos.

Y Prisma con Mercurius. Así que, en primer lugar, quién soy. Soy Luca Del Pupo y soy un chico italiano. Soy desarrollador de FoodStack y amo JavaScript y también TypeScript. En mi tiempo libre, creo contenido en mi canal de YouTube y me encanta escribir algo para mostrar mi experiencia a los demás y compartirla. Y me encanta correr y hacer senderismo. Pero ahora es hora de pasar al tema.

Entonces, ¿por qué estoy aquí? Primero, porque el comité decidió votar por mi charla, así que gracias. Y luego, porque en el último período, intenté ayudar a un cliente a pasar de una API REST a GraphQL. Así que quiero compartir nuestra experiencia y cómo decidimos hacer el cambio de esta manera.

En los últimos 10 años, típicamente, solo he trabajado con API REST. Cuando comencé a trabajar, la API generalmente solo servía a navegadores o tal vez algunas aplicaciones de escritorio. Y las API REST funcionan muy bien de esta manera, en este caso, y se pueden usar sin ningún problema. No tengo ningún error o problema con las API REST porque funcionan muy bien y las uso a diario en este momento, pero en algunos escenarios, tenemos que mejorar la flexibilidad de la API. Típicamente, en el último período, comenzamos a utilizar otros dispositivos que utilizan nuestra API, por ejemplo, smartphones y también smartphones y smart TVs. Así que comenzamos a aprender el potencial de GraphQL porque necesitamos darle más poder al cliente, desafortunadamente. Y así comenzamos a aprender y probar GraphQL.

Antes de pasar a la decisión, también quiero mostrar la necesidad del cliente en este caso. Típicamente, trabajo con empresas pequeñas y medianas, y tienen muchos desarrolladores junior e intermedios. Y algunos desarrolladores senior. Las necesidades de este cliente son las siguientes, típicamente. Quieren un framework o una base de código fácil de mantener. Luego, el framework o la arquitectura deben ayudar en el día a día. Los desarrolladores deben ayudar a los junior, típicamente porque quieren aportar valor y aumentar sus habilidades, y también ayudar a los senior a no perder tiempo resolviendo problemas del framework. Bien. Luego, es imprescindible tener TypeScript en nuestra aplicación, y los desarrolladores deben enfocarse en el negocio y no en resolver problemas del framework. Entonces, con esta necesidad, decidimos hacer el cambio de esta manera, con Mercurius en la parte de GraphQL y Prisma para acceder a la base de datos y la parte del acceso a datos. El desarrollador se encuentra en el medio. Así que tengo que crear la firma de GraphQL y crear el código para acceder a la base de datos utilizando Prisma.

2. Razones para elegir Mercurius y Prisma

Short description:

Decidimos pasar a Mercurius y Prisma para nuestras implementaciones de GraphQL y base de datos, respectivamente. Mercurius es fácil de aprender si ya conoces Fastify y tiene una excelente documentación. Prisma mejora la experiencia del desarrollador y permite modelar datos fácilmente y realizar consultas seguras en cuanto a tipos. También se integra bien con Fastify. Ahora, pasemos a la demostración.

¿Por qué decidimos hacer el cambio de esta manera? Primero, la implementación de GraphQL. Ya conocemos Fastify y Mercurius se basa en Fastify. Por lo tanto, para el desarrollador, es fácil aprender Mercurius porque es fácil de usar si ya conoces Fastify. Además, Mercurius es fácil de usar. No es ciencia espacial. Si conoces GraphQL, puedes crear un servidor GraphQL de una manera muy sencilla. La documentación es increíble, en mi opinión. Puedes abrir el sitio web y encontrar todo. Y si no encuentras la información que buscas, puedes abrir un problema, preguntar a la comunidad y te responderán lo antes posible. Por último, para mantener este soporte listo para usar, no tienes que dedicar mucho tiempo a usar TypeScript, solo tienes que crear la configuración de TS, etc., pero es muy fácil. Y por último, hay un pequeño paquete de npm llamado Mercurius Code Gen que te ayuda a convertir tu archivo JQL con todas las firmas de tu servidor JQL en definiciones de TypeScript. Así puedes garantizar la definición de tu GraphQL con TypeScript, y también puedes, si quieres, crear operaciones para construir tus pruebas y probar tu servidor GraphQL en este caso. Y por ejemplo, si cambias el esquema GraphQL y rompes la operación durante la generación de código, la biblioteca Mercurius mostrará un error y tendrás que solucionarlo. Así puedes prevenir problemas antes de llegar a producción en este caso. De acuerdo, no. Oh, no. De acuerdo.

3. Implementación de la base de datos con Prisma

Short description:

Decidimos pasar a Prisma para la implementación de la base de datos. Prisma mejora la experiencia del desarrollador, es fácil de usar y mantener, y admite TypeScript. Ofrece una buena modelización de datos, consultas seguras en cuanto a tipos y capacidades de migración. Prisma se puede integrar fácilmente en un entorno de Fastify. Ahora, pasemos a la demostración.

Luego, para la implementación de la base de datos, para la implementación del acceso a datos, decidimos pasar a Prisma. Normalmente, no me encantan los ORM, pero Prisma es un poco diferente en este caso. Nos ayuda a mejorar la experiencia del desarrollador del desarrollador, y también es fácil de usar y mantener. Y si estás familiarizado con TypeScript, la sintaxis para crear una base de datos y una capa de acceso a datos con Prisma, es bastante simple.

Luego, Prisma tiene una buena modelización de datos, por lo que es muy fácil crear tu entidad usando Prisma. Puedes crear consultas seguras en cuanto a tipos, por lo que puedes garantizar tu consulta durante el tiempo de compilación de tu aplicación si usas TypeScript. Y también puedes usar la migración para mantener actualizada tu base de datos en producción o en etapa, etc. Por último, pero no menos importante, puedes integrar Prisma en tu aplicación Fastify mediante un sencillo complemento, por lo que es muy fácil de integrar en un entorno de Fastify. Y por último, tanto Mercurius como Prisma aman TypeScript.

Así que hablo demasiado, así que quiero mostrarte la demostración para que puedas ver el código y entender los beneficios de la solución. Primero, ejecuto el servidor para que puedas ver la demostración en este caso. Ya te mostré la demostración antes en el... Está bien, más grande, no más grande. De acuerdo, mejor. Perfecto. De acuerdo, esto es GraphiQL. GraphiQL es una interfaz de usuario para probar o mostrar o ver la documentación de tu servidor GraphQL. Puedes usar los documentos si quieres y puedes verificar cuáles son las consultas en este caso. Puedes verificar cuáles son las mutaciones o cuáles son las suscripciones. Así que si quieres, puedes ver toda la documentación de tu servidor GraphQL. Luego también puedes probar tu aplicación. Por ejemplo, ya creé una consulta para un saludo. Así que este es un menú de pizza Tonino, lo siento, soy italiano y la pizza está en mi sangre. La primera consulta es el saludo. Así que es simple. Llamas a la consulta de saludo y el servidor responde con bienvenido a la pizza Tonino. También puedes crear una consulta con un parámetro si quieres. Bastante simple. En este caso, puedes llamar, HolaPupo. Paso el nombre, mi nombre en este caso.

4. Tonino Pizza y Esquema Prisma

Short description:

En esta sección, exploraremos un ejemplo más complejo utilizando la pizza Tonino. Ya hemos creado una pizza para la Tortuga Ninja, específicamente una pizza de pepperoni. Puedes ver la lista de pizzas, crear nuevas pizzas como la pizza margherita y más. Pasando a la implementación del código, comenzaremos con el lado de Prisma. El archivo de esquema de Prisma es la única fuente de tu base de datos, que contiene las secciones de generador, fuente de datos y modelo.

HolaPupo, bienvenido a la pizza Tonino. Para ver un ejemplo más complejo que podemos hacer con la pizza. Ya he creado una pizza. Esta es la pizza para la Tortuga Ninja. Así que puedes ver la lista de pizzas. En este caso, la pizza es solo una, la pizza de pepperoni.

Y como puedes ver, puedes ver toda la implementación, puedes ver la lista de pizzas en el menú en este caso. También puedes, por ejemplo, crear una nueva pizza, la pizza margherita y así sucesivamente. Bastante simple. No quiero pasar demasiado tiempo en GraphQL porque no es el enfoque real del tema. Puedes crear pizzas y luego verlas en la lista de pizzas. Bastante simple en este caso.

De acuerdo, ahora quiero pasar al código para mostrar cómo podemos implementar este servidor GraphQL. Esta es mi aplicación. Quiero comenzar desde el lado de Prisma. Entonces, si quieres trabajar con Prisma, típicamente tienes que trabajar en una carpeta única llamada Prisma. Y hay solo un archivo. Está bien, el código es visible. Perfecto. El esquema de Prisma es el único archivo para trabajar con Prisma. Entonces, en este caso, el esquema de Prisma es la única fuente de tu base de datos. El esquema de Prisma es bastante simple. Hay una primera parte donde puedes ver el generador. El generador es el proveedor utilizado para construir tu cliente Node para llamar a tu base de datos. La fuente de datos es la información para entender cuál es el proveedor. En este caso, el proveedor es el Postgres SQL. Pero puedes usar MySQL, SQL Server y otros proveedores. La URL se utiliza para la cadena de conexión. Y luego, la otra parte importante es el modelo. Los modelos son las entidades de tu base de datos en este caso.

5. Implementación de la Base de Datos con Esquema Prisma

Short description:

El esquema de Prisma te permite definir la estructura de las entidades y propiedades de tu base de datos. Puedes especificar el tipo de cada propiedad y agregar decoradores específicos, como la clave primaria o los valores predeterminados. La CLI de Prisma proporciona comandos como 'init' para inicializar tu proyecto, 'generate' para crear el cliente de Prisma y 'dev' o 'deploy' para las migraciones. Las migraciones se almacenan en la carpeta de Prisma, y puedes usar 'dev' para el modo de desarrollo y 'deploy' para producción. Ahora pasemos a la parte de GraphQL.

El esquema de Prisma te permite definir la estructura de las entidades y propiedades de tu base de datos. Puedes especificar el tipo de cada propiedad y agregar decoradores específicos, como la clave primaria o los valores predeterminados. La CLI de Prisma proporciona comandos como 'init' para inicializar tu proyecto, 'generate' para crear el cliente de Prisma y 'dev' o 'deploy' para las migraciones. Las migraciones se almacenan en la carpeta de Prisma, y puedes usar 'dev' para el modo de desarrollo y 'deploy' para producción.

La sintaxis, como puedes notar, es similar a TypeScript. El modelo indica que este modelo, el tema, es una entidad simple para la base de datos. Luego puedes describir tu columna o propiedad. En este caso, el ID, el nombre y el create-head, y así sucesivamente. Puedes indicar el tipo de la columna, en este caso, string, date, time, y así sucesivamente. Y puedes decorar cada propiedad con una decoración específica. Por ejemplo, el ID para la clave primaria, el valor predeterminado si deseas poner un UID predeterminado en tu entidad, y así sucesivamente.

También puedes crear relaciones para la clave de rango utilizando una sintaxis simple con la relación. Bastante simple, y si quieres mejorar tu experiencia de desarrollo, puedes instalar la extensión de Prisma en VS Code para obtener algo de intellisense, por ejemplo, puedes obtener ayuda para crear la columna, y así sucesivamente. Si comienzas a trabajar con Prisma, debes conocer cuatro comandos para la CLI. Típicamente, debes comenzar desde el mpx Prisma. Prisma es la CLI, y el init es el primer comando. Init se utiliza para inicializar tu proyecto en este caso, y ya lo he creado, así que no lo ejecuto. Luego, el segundo es el generate. Generate se utiliza para convertir el esquema en tu cliente de Prisma para llamar a la base de datos desde tu código base. Entonces, si lo ejecutas, Prisma comienza a leer tu esquema y crea el cliente de Prisma como un objeto. Hay algunos, está bien. Está bien, ahí está el cliente de Prisma que se utiliza para llamar a la base de datos y hacer la consulta, y así sucesivamente. El último, pero no menos importante. La CLI de Prisma permite crear una migración. Hay dos comandos para la migración, el dev y el deploy. El dev se utiliza durante el modo de desarrollo. Entonces, si cambias el esquema, por ejemplo, y agregas una nueva columna o una nueva tabla, debes llamar al comando dev para crear la nueva migración. Las migraciones están dentro de la carpeta de Prisma, dentro de la carpeta de migraciones. Es una migración, está dentro de una carpeta única con la marca de tiempo y una descripción simple que puedes agregar, y la migración es un archivo simple. En este caso, solo hay una migración para crear la tabla de topping, la tabla de pizza, y así sucesivamente. Puedes usar el dev, pero también puedes usar el deploy. En mi caso, si ejecuto el deploy, intento aplicar la migración, pero la migración ya está aplicada, y en este caso, no sucede nada. Es común usar el deploy en tu CI o en el script de implementación, dependiendo de cómo implementes esto.

Ahora es el momento de pasar a la parte de GraphQL.

6. Implementación de GraphQL con Fastify y Prisma

Short description:

En esta implementación, hay dos carpetas importantes: la carpeta GraphQL, que contiene el esquema para el servidor jql, y la carpeta de la aplicación, que contiene la aplicación real. La aplicación real carga complementos, incluida la configuración y el contexto de la base de datos. El contexto de la base de datos es un complemento de Fastify utilizado para inicializar el cliente de Prisma. El cliente de Prisma se crea utilizando la URL de conexión y se puede acceder utilizando app.dbcontext. También hay un gancho para desconectar la conexión al apagar el servidor.

Entonces, en este caso, hay dos carpetas importantes para esta implementación. La primera es la carpeta GraphQL, donde puedes encontrar el antiguo archivo jql. Ese es el esquema que contiene todas las descripciones para tu servidor jql. En este caso, la mutación contiene todas las mutaciones. Cierra esto, está bien. La mutación contiene la mutación, la consulta contiene todas las consultas y la suscripción, todas las suscripciones. También puedes crear un archivo con todo el código dentro. Prefiero dividirlo porque es más claro que tener solo un archivo. Luego también puedes crear una carpeta con, no sé, la entrada para la pizza, el tipo de pizza, y así sucesivamente. Bastante simple si ya conoces GraphQL, y espero que ya lo conozcas. La operación se utiliza por Mercurius para crear nuestro caso de prueba, por ejemplo. Puedes crear la consulta para la bienvenida y Mercurius code gen convierte esta operación en un objeto que puedes usar para probar tu servidor durante el modo de desarrollo.

Ahora es el momento de ver el código. Entonces, en el código fuente, típicamente está el servidor. Como puedes notar, el servidor es un servidor Fastify simple. Debes inicializar una instancia simple de Fastify y luego puedes registrar algo. En este caso, el puerto es el 3000 y en la carpeta de la aplicación, en el archivo de la aplicación, puedes encontrar la aplicación real. La aplicación real tiene dos puntos principales. Primero, intenta cargar los complementos y los complementos en este caso son dos. La configuración, por lo que es bastante simple en este caso. Uso un TypeBox para verificar si el entorno del proceso contiene el node-ev y también la URL de la base de datos. Entonces, en este caso, estoy seguro de que el proceso contiene estas dos propiedades y estos dos entornos. Y luego la parte importante es el contexto de la base de datos. El contexto de la base de datos es un complemento simple de Fastify que se utiliza para inicializar el cliente de Prisma. En este caso, FP es la función del complemento de Fastify y puedes crear el cliente de Prisma de esta manera, por lo que puedes usar el nuevo cliente de Prisma y puedes pasar la URL en este caso, la URL se utiliza como cadena de conexión. Luego debes crear la conexión de esta manera y luego puedes decorar tu servidor utilizando la función de propiedad decorada y en este caso, el contexto de la base de datos contiene nuestra instancia de cliente de Prisma. De esta manera, puedes usar app.dbcontext para tener acceso a la implementación de Prisma. Por último, pero no menos importante, hay un gancho en el onClose para desconectar la conexión si el servidor se apaga. Bastante simple. Ahora es el momento de ver la parte importante para GraphQL.

7. Configuración de GraphQL y Mercurius

Short description:

GraphQL se registra como otro complemento, y Mercurius es un complemento simple registrado en Fastify. La función de carga de esquema convierte la carpeta JQL en código real para Mercurius. Puedes especificar la ubicación del archivo JQL y la biblioteca a utilizar. El convertidor transforma los archivos en formato de esquema para Mercurius. Se puede habilitar el modo de observación para actualizar el servidor en tiempo real.

GraphQL se registra como otro complemento en este caso, y en el archivo GraphQL puedes encontrar toda la implementación. Como puedes notar, Mercurius es un complemento simple registrado en Fastify y debes pasar alguna configuración. La primera es el esquema. Entonces, utilizando la función de carga de esquema, utilizo la biblioteca mercurius.code.gen para convertir la carpeta JQL en código real para Mercurius. Lo primero es el archivo de carga de esquema. Utilizando la sintaxis, puedes indicarle a mercurius.code.gen dónde puede encontrar el archivo JQL y la biblioteca, verifica, está bien. No es un buen día probablemente para mi Mac, está bien. Y el convertidor, todos los archivos en formato de esquema para Mercurius. Y también, si quieres, puedes habilitar el modo de observación para cambiar en tiempo real tu servidor. En este caso, para mí, solo está en modo de desarrollo. Y en este caso, cuando algo cambia, actualizo la parte de GraphQL para una nueva característica u algo así.

8. Code-Gen Mercurius y Implementación de Resolver

Short description:

La función Code-Gen Mercurius convierte el archivo JQL a TypeScript, generando la definición del servidor. La carpeta de resolutores contiene carpetas separadas para consultas, mutaciones y suscripciones. Cada carpeta contiene las operaciones correspondientes para pizza y topping. Enfoquémonos en la mutación createPizza, que utiliza la sintaxis de TypeScript y respeta la firma definida en el archivo JQL. La función toma el padre, los datos de la pizza del cliente y el contexto de GraphQL, que incluye el cliente Prisma para las operaciones de la base de datos.

Bien, lo último antes de ir al código real es la función Code-Gen Mercurius que utiliza la idea del archivo JQL para convertir el archivo JQL a TypeScript. Entonces, en la ruta de destino como origen del generador de resolutores TS, puedes encontrar todas las definiciones de tu servidor. Puedes encontrar, por ejemplo, la mutación, la consulta y la mutación. Este tipo es utilizado por el desarrollador para asegurarse de que el servidor respete la definición JQL.

Ahora, si vuelvo a la parte de GraphQL, cuando configuras esto, solo tienes que prestar atención o cuidar de crear el código para tu negocio. Entonces, para crear el cargador y el resolutor. Hoy, solo hablaré sobre el resolutor porque solo tengo 20 minutos, pero es similar para el cargador. Dentro de la carpeta de resolutores, puedes encontrar el indexador. El resolutor es un objeto simple con tres propiedades, la consulta, la mutación y la suscripción. Y en mi caso, creo una carpeta simple para cada una de estas. Entonces, dentro de la consulta, la mutación, puedes encontrar todas las mutaciones para la pizza, para el topping y así sucesivamente. Dentro de la consulta, puedes encontrar todas las consultas para la pizza, el topping y así sucesivamente. Y bastante simple en este caso. Quiero mostrarte, por ejemplo, la mutación para crear una pizza. En este caso, la implementación es bastante simple. Entonces, utilizando esta sintaxis, la sintaxis típica de TypeScript, creo una nueva función llamada createPizza. Y utilizando el tipo de la mutación, le digo a esta función que debe respetar la firma de createPizza en los tipos de mutación. De esta manera, estoy seguro de que el código debe respetar el archivo JQL descrito anteriormente.

Entonces, la función es bastante simple. Así que está el padre. En este caso, no tienes que prestar mucha atención al padre. Ese es el primer parámetro. El segundo parámetro son los datos que llegan del cliente, en este caso, la pizza, el nombre y la lista de ingredientes. El tercer parámetro contiene el contexto de GraphQL, si quieres, la instancia de la aplicación Fastify, y también el objeto pubsub en este caso. Usando la aplicación, puedes obtener, por ejemplo, el registro, en este caso, Pino, o el DbContext. El DbContext, como puedes ver, es el cliente Prisma, registrado anteriormente con el complemento. Y de esta manera, puedes llamar, por ejemplo, a DbContext.pizza para insertar la pizza en tu base de datos. El DbContext es bastante simple de usar, así que puedes usar DbContext, y puedes tener la pizza, en nuestro caso, el topping y la receta, si quieres. Cada modelo crea un objeto con todos los posibles métodos para insertar, seleccionar, actualizar y eliminar.

9. Conclusion and Resources

Short description:

Luego puedes juntar las cosas y crear tu lógica de negocio. PubSub te permite notificar suscripciones cuando algo sucede. El objeto query se utiliza para recuperar los ingredientes con paginación. Esta arquitectura ofrece beneficios para trabajar con GraphQL. Fastify y Mercurio proporcionan un servidor GraphQL eficiente. Prisma crea una capa entre tu aplicación y la base de datos, mejorando la experiencia del desarrollador y la velocidad. Los desarrolladores pueden centrarse en las características del negocio sin perder tiempo en problemas de framework. Ambos aman TypeScript.

Luego puedes juntar las cosas, y puedes crear tu lógica de negocio, en este caso. ¿Qué es PubSub? Si tienes alguna suscripción, puedes usar el objeto PubSub para notificar que algo ha sucedido. En este caso, creo el evento de creación de pizza, en este caso, y esto notifica la suscripción. Y si algo está suscrito, recibe la notificación, bastante simple.

La consulta es muy similar, así que te muestro, por ejemplo, el ingrediente. En este caso, uso el objeto query, y utilizando el getTopping, en este caso, tienes diferentes objetos, porque en este caso, la consulta quiere la paginación. Puedes obtener el límite y el desplazamiento, y puedes usar el método find para encontrar los muchos ingredientes en este caso, o también puedes obtener usando el getTopping para obtener el ingrediente por un ID, por ejemplo. Sé que el ejemplo es bastante simple, pero probablemente has entendido el beneficio de usar esta architecture.

Desde la demo, creo que eso es todo, así que quiero volver a la diapositiva nuevamente para cerrar la charla, así que... Perfecto. De acuerdo. En conclusión, no soy un vendedor, así que no estoy aquí para vender esta solución, pero es una posible solución si quieres trabajar con GraphQL. ¿Por qué decidimos seguir este camino? Primero, Fastify y Mercurio son una buena opción para crear un servidor GraphQL. Fastify es muy rápido si quieres, y Mercurio también. Y la combinación te ayuda a crear un servidor muy performance. Sí, si conoces GraphQL, puedes cometer un error muy grave si quieres. Pero en este caso, no está en el lado de Mercurio, sino en el lado del desarrollador, probablemente el problema. Usando Prisma, puedes crear una capa entre tu aplicación y la database. Puedes tener una buena developer experience. Sí, tienes que crear, tienes que hacer un intercambio porque ir directamente a la database o usar NRM en este caso. Pero con Prisma, típicamente puedes mejorar la velocidad de tu equipo. Y si tienes algún problema con la consulta, es muy fácil personalizar la consulta y crear tu propia consulta si quieres. Por último pero no menos importante, los desarrolladores se centran en crear características para tu negocio y no pierden tiempo resolviendo problemas de framework porque hay un parche, un parche que rompe tu servidor. Y ambos aman TypeScript.

Así que creo que eso es todo. Si quieres, aquí puedes encontrar la diapositiva y también la demo. Solo comparto mis redes sociales allí entonces. Si quieres, sumérgete en Prisma. Escribí una serie de Prisma y puedes encontrarla en dev.io o en este código QR. Y eso es todo.

QnA

Contact Information and Q&A

Short description:

Gracias a todos por su apoyo y participación. Pueden conectarse conmigo en LinkedIn y Twitter, suscribirse a mi canal de YouTube y visitar mi blog para obtener más contenido. Si tienen alguna pregunta, no duden en hacerla. Ahora, abordemos algunas de las preguntas planteadas. Primero, el código de la demo está disponible en GitHub. Pueden hacer un fork o clonar el proyecto y ejecutar el servidor. En cuanto al uso de Mercurius para las suscripciones de GraphQL, admite conexiones de web socket de forma predeterminada. Comparándolo con GraphQL Apollo, recientemente he cambiado mi enfoque y es posible que no tenga la información más actualizada.

Muchas gracias a todos. Estos son mis contactos. LinkedIn y Twitter están abiertos, así que son bienvenidos si desean charlar conmigo. Si desean suscribirse a mi canal de YouTube, este es el nombre. Y si desean leer algo, dev.io o mis publicaciones en el blog están en mi blog. Y eso es todo. Gracias. Espero que hayan disfrutado de este contenido y gracias a todos y a Node Congress. Gracias, Luca. Increíble.

Y ya tenemos varias preguntas. Bueno, la primera, creo que ya ha sido respondida parcialmente, no es la que he seleccionado ahora mismo. Un segundo. ¿Está disponible en algún lugar el código de la demo? ¿Está en el mismo código QR? Sí, podemos volver al código. Tienen que ir a este código QR. Es el código de GitHub, el enlace de GitHub, y tienen que hacer un fork o clonarlo y ejecutar el servidor. No está disponible en un enlace, pero pueden descargarlo, clonar el proyecto y ejecutarlo. Así que espero que esté bien. Sí, gracias por eso. Sí. Siguiente pregunta. ¿Recomendarías usar Mercurius para las conexiones de web socket de las suscripciones de GraphQL? ¿Cómo lo compararías con GraphQL Apollo? Bueno, en realidad, las suscripciones de GraphQL, ¿cuál estás usando? En realidad, las suscripciones de GraphQL utilizan un web socket de forma predeterminada. Así que si deseas construir otro web socket para manejarlo, puedes hacerlo sin ningún problema. Pero de forma predeterminada, en GraphQL, puedes usar las suscripciones de GraphQL con un web socket. Muy simple. ¿Cómo se compara con GraphQL Apollo? Bueno, en el último período, he perdido el control de Apollo probablemente.

Comparison of Apollo and Mercurios

Short description:

Hace dos años probé Apollo, pero estaba basado en Express. Ahora tienen su propio servidor, que puede ser mejor. Sin embargo, puedes integrar Apollo en Fastify sin problemas. En cuanto a Apotos GraphQL, no tengo información al respecto. En cuanto a Mercurios, lo elegimos porque está construido sobre Fastify, que es amado por nuestro equipo. Fastify ofrece un buen rendimiento y mantenimiento. La comunidad de Express no ha lanzado nuevas versiones en los últimos ocho años, mientras que la comunidad de Fastify es más activa. Un recordatorio rápido: evita crear demasiados cargadores y consultas, ya que puede aumentar el tiempo de espera para los usuarios.

Lo probé hace dos años. El problema con Apollo es que está basado en Express. Ahora sé que han creado su propio servidor. Probablemente sea mejor en este momento. Pero si quieres, también puedes integrar Apollo en Fastify sin ningún problema. Hay un complemento. Gracias, Matteo.

En realidad, no me gusta comparar dos cosas. Hay pros y contras en la solución. Por lo general, tienes que encontrar la mejor manera para tu solución probablemente. Muy bien. Gracias. ¿Alguna opinión sobre Apotos, GraphQL, que cambia la generación del esquema para que sea TypeScript primero? No sé qué es Apotos GraphQL en realidad. Así que probablemente no tengo la respuesta en este caso. Por favor, danos más información. Sí, otra pregunta. ¿Por qué Mercurios? Esta es una buena pregunta. En realidad, como dije antes, ya conocemos Fastify y Mercurios, en este caso, está construido sobre Fastify. La otra motivación es el amor del equipo por Fastify, y nos cambiamos de Express a Fastify. La forma de crear una API REST de Node antes con Fastify es similar a Express, pero tienes un buen rendimiento, un buen mantenimiento. Gracias, Matteo. Además, puedes tener nuevas versiones. Si revisas las versiones de Express, se detuvo en la versión cuatro, tres, no recuerdo, cuatro, tres o cuatro. Lo siento, ocho años. Sí, la comunidad detrás es mejor en este momento que otros frameworks para el entorno de Node.

Un recordatorio rápido para todos. Oh, sí. Sí. Un recordatorio rápido también. También, ten cuidado de crear muchos cargadores que crean muchas consultas y que generan mucho tiempo de espera para tus usuarios probablemente. Genial.

Choosing Ideal Stack for Node.js

Short description:

Si quieres tener control de tu base de datos, utiliza el proveedor expuesto por la base de datos. Para el stack ideal en Node.js, utiliza Fastify para la API REST y GraphQL. Elige Prisma para la base de datos y, si conoces bien el proveedor, utiliza el proveedor por defecto como MongoDB.

Sí, creo que solo tengo una pregunta rápida que puede ser muy rápida. Entonces, si pudieras elegir tu stack ideal para digamos database más API en sí, limitemos a Node.js. ¿Qué elegirías? Solo limítalo a Node.js. Probablemente para la API REST y Graphql Fastify. Y para la database, si tienes que elegir NORM, elige Prisma. Si conoces muy bien, si tienes tiempo y conoces muy bien el proveedor, utiliza el proveedor por defecto para tu proveedor. Así que utiliza el proveedor MongoDB y así sucesivamente. Por lo general, si quieres, si quieres controlar tu database, utiliza directamente el proveedor expuesto por la database, en este caso, porque te da más control del personal. Gracias, Luca. Gracias. Sí. De acuerdo. Sí. De acuerdo. Gracias. Gracias. Gracias. Gracias. Gracias. Gracias. Gracias. Gracias. Gracias. Gracias.

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
Tom Pressenwurter introduces Redwood.js, a full stack app framework for building GraphQL APIs easily and maintainably. He demonstrates a Redwood.js application with a React-based front end and a Node.js API. Redwood.js offers a simplified folder structure and schema for organizing the application. It provides easy data manipulation and CRUD operations through GraphQL functions. Redwood.js allows for easy implementation of new queries and directives, including authentication and limiting access to data. It is a stable and production-ready framework that integrates well with other front-end technologies.
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
This Talk discusses handling local state in software development, particularly when dealing with asynchronous behavior and API requests. It explores the challenges of managing global state and the need for actions when handling server data. The Talk also highlights the issue of fetching data not in Vuex and the challenges of keeping data up-to-date in Vuex. It mentions alternative tools like Apollo Client and React Query for handling local state. The Talk concludes with a discussion on GitLab going public and the celebration that followed.
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
Envelope is a powerful GraphQL plugin system that simplifies server development and allows for powerful plugin integration. It provides conformity for large corporations with multiple GraphQL servers and can be used with various frameworks. Envelope acts as the Babel of GraphQL, allowing the use of non-spec features. The Guild offers GraphQL Hive, a service similar to Apollo Studio, and encourages collaboration with other frameworks and languages.
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
The Talk discusses the challenges and advancements in using GraphQL and React together. It introduces RedwoodJS, a framework that simplifies frontend-backend integration and provides features like code generation, scaffolding, and authentication. The Talk demonstrates how to set up a Redwood project, generate layouts and models, and perform CRUD operations. Redwood automates many GraphQL parts and provides an easy way for developers to get started with GraphQL. It also highlights the benefits of Redwood and suggests checking out RedwoodJS.com for more information.
Adoptando GraphQL en una Empresa
GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
Adoptando GraphQL en una Empresa
Today's Talk is about adopting GraphQL in an enterprise. It discusses the challenges of using REST APIs and the benefits of GraphQL. The Talk explores different approaches to adopting GraphQL, including coexistence with REST APIs. It emphasizes the power of GraphQL and provides tips for successful adoption. Overall, the Talk highlights the advantages of GraphQL in terms of efficiency, collaboration, and control over APIs.
Deja paso a los resolvers: un nuevo enfoque para la ejecución de GraphQL
GraphQL Galaxy 2022GraphQL Galaxy 2022
16 min
Deja paso a los resolvers: un nuevo enfoque para la ejecución de GraphQL
GraphQL has made a huge impact in the way we build client applications, websites, and mobile apps. Despite the dominance of resolvers, the GraphQL specification does not mandate their use. Introducing Graphast, a new project that compiles GraphQL operations into execution and output plans, providing advanced optimizations. In GraphFast, instead of resolvers, we have plan resolvers that deal with future data. Graphfast plan resolvers are short and efficient, supporting all features of modern GraphQL.

Workshops on related topic

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
Workshop
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.
Construir con SvelteKit y GraphQL
GraphQL Galaxy 2021GraphQL Galaxy 2021
140 min
Construir con SvelteKit y GraphQL
Top Content
Workshop
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
Modelado de Bases de Datos Relacionales para GraphQL
GraphQL Galaxy 2020GraphQL Galaxy 2020
106 min
Modelado de Bases de Datos Relacionales para GraphQL
Top Content
Workshop
Adron Hall
Adron Hall
En esta masterclass profundizaremos en el modelado de datos. Comenzaremos con una discusión sobre varios tipos de bases de datos y cómo se mapean a GraphQL. Una vez que se haya establecido esa base, el enfoque se desplazará a tipos específicos de bases de datos y cómo construir modelos de datos que funcionen mejor para GraphQL en varios escenarios.
Índice de contenidosParte 1 - Hora 1      a. Modelado de Datos de Bases de Datos Relacionales      b. Comparando Bases de Datos Relacionales y NoSQL      c. GraphQL con la Base de Datos en menteParte 2 - Hora 2      a. Diseño de Modelos de Datos Relacionales      b. Relación, Construcción de Tablas Multijoin      c. Complejidades de Consulta de Modelado de Datos Relacionales y GraphQL
Prerrequisitos      a. Herramienta de modelado de datos. El formador utilizará dbdiagram      b. Postgres, aunque no es necesario instalar esto localmente, ya que estaré utilizando una imagen de Dicker de Postgres, de Docker Hub para todos los ejemplos      c. Hasura
Construir y Desplegar un Backend Con Fastify & Platformatic
JSNation 2023JSNation 2023
104 min
Construir y Desplegar un Backend Con Fastify & Platformatic
Top Content
WorkshopFree
Matteo Collina
Matteo Collina
Platformatic te permite desarrollar rápidamente GraphQL y REST APIs con un esfuerzo mínimo. La mejor parte es que también te permite desatar todo el potencial de Node.js y Fastify siempre que lo necesites. Puedes personalizar completamente una aplicación de Platformatic escribiendo tus propias características y plugins adicionales. En la masterclass, cubriremos tanto nuestros módulos de Open Source como nuestra oferta en la Nube:- Platformatic OSS (open-source software) — Herramientas y bibliotecas para construir rápidamente aplicaciones robustas con Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (actualmente en beta) — Nuestra plataforma de alojamiento que incluye características como aplicaciones de vista previa, métricas integradas e integración con tu flujo de Git (https://platformatic.dev/). 
En esta masterclass aprenderás cómo desarrollar APIs con Fastify y desplegarlas en la Platformatic Cloud.
Construyendo APIs GraphQL sobre Ethereum con The Graph
GraphQL Galaxy 2021GraphQL Galaxy 2021
48 min
Construyendo APIs GraphQL sobre Ethereum con The Graph
Workshop
Nader Dabit
Nader Dabit
The Graph es un protocolo de indexación para consultar redes como Ethereum, IPFS y otras blockchains. Cualquiera puede construir y publicar APIs abiertas, llamadas subgrafos, para hacer que los datos sean fácilmente accesibles.

En este masterclass aprenderás cómo construir un subgrafo que indexa datos de blockchain de NFT del contrato inteligente Foundation. Desplegaremos la API y aprenderemos cómo realizar consultas para recuperar datos utilizando diferentes tipos de patrones de acceso a datos, implementando filtros y ordenamiento.

Al final del masterclass, deberías entender cómo construir y desplegar APIs de alto rendimiento en The Graph para indexar datos de cualquier contrato inteligente desplegado en Ethereum.
Problemas difíciles de GraphQL en Shopify
GraphQL Galaxy 2021GraphQL Galaxy 2021
164 min
Problemas difíciles de GraphQL en Shopify
Workshop
Rebecca Friedman
Jonathan Baker
Alex Ackerman
Théo Ben Hassen
 Greg MacWilliam
5 authors
En Shopify a gran escala, resolvemos algunos problemas bastante difíciles. En este masterclass, cinco oradores diferentes describirán algunos de los desafíos que hemos enfrentado y cómo los hemos superado.

Tabla de contenidos:
1 - El infame problema "N+1": Jonathan Baker - Vamos a hablar sobre qué es, por qué es un problema y cómo Shopify lo maneja a gran escala en varios APIs de GraphQL.
2 - Contextualizando APIs de GraphQL: Alex Ackerman - Cómo y por qué decidimos usar directivas. Compartiré qué son las directivas, qué directivas están disponibles de forma predeterminada y cómo crear directivas personalizadas.
3 - Consultas de GraphQL más rápidas para clientes móviles: Theo Ben Hassen - A medida que tu aplicación móvil crece, también lo harán tus consultas de GraphQL. En esta charla, repasaré diversas estrategias para hacer que tus consultas sean más rápidas y efectivas.
4 - Construyendo el producto del futuro hoy: Greg MacWilliam - Cómo Shopify adopta las características futuras en el código actual.
5 - Gestión efectiva de APIs grandes: Rebecca Friedman - Tenemos miles de desarrolladores en Shopify. Veamos cómo estamos asegurando la calidad y consistencia de nuestras APIs de GraphQL con tantos colaboradores.