GraphQL con Mercurius y Prisma, amor a primera vista

Rate this content
Bookmark

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.

34 min
14 Apr, 2023

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.

Available in English

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

GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
From GraphQL Zero to GraphQL Hero with RedwoodJS
Top Content
We all love GraphQL, but it can be daunting to get a server up and running and keep your code organized, maintainable, and testable over the long term. No more! Come watch as I go from an empty directory to a fully fledged GraphQL API in minutes flat. Plus, see how easy it is to use and create directives to clean up your code even more. You're gonna love GraphQL even more once you make things Redwood Easy!
Vue.js London Live 2021Vue.js London Live 2021
24 min
Local State and Server Cache: Finding a Balance
Top Content
How many times did you implement the same flow in your application: check, if data is already fetched from the server, if yes - render the data, if not - fetch this data and then render it? I think I've done it more than ten times myself and I've seen the question about this flow more than fifty times. Unfortunately, our go-to state management library, Vuex, doesn't provide any solution for this.For GraphQL-based application, there was an alternative to use Apollo client that provided tools for working with the cache. But what if you use REST? Luckily, now we have a Vue alternative to a react-query library that provides a nice solution for working with server cache. In this talk, I will explain the distinction between local application state and local server cache and do some live coding to show how to work with the latter.
GraphQL Galaxy 2022GraphQL Galaxy 2022
16 min
Step aside resolvers: a new approach to GraphQL execution
Though GraphQL is declarative, resolvers operate field-by-field, layer-by-layer, often resulting in unnecessary work for your business logic even when using techniques such as DataLoader. In this talk, Benjie will introduce his vision for a new general-purpose GraphQL execution strategy whose holistic approach could lead to significant efficiency and scalability gains for all GraphQL APIs.

Workshops on related topic

GraphQL Galaxy 2021GraphQL Galaxy 2021
140 min
Build with SvelteKit and GraphQL
Top Content
Featured WorkshopFree
Have you ever thought about building something that doesn't require a lot of boilerplate with a tiny bundle size? In this workshop, Scott Spence will go from hello world to covering routing and using endpoints in SvelteKit. You'll set up a backend GraphQL API then use GraphQL queries with SvelteKit to display the GraphQL API data. You'll build a fast secure project that uses SvelteKit's features, then deploy it as a fully static site. This course is for the Svelte curious who haven't had extensive experience with SvelteKit and want a deeper understanding of how to use it in practical applications.

Table of contents:
- Kick-off and Svelte introduction
- Initialise frontend project
- Tour of the SvelteKit skeleton project
- Configure backend project
- Query Data with GraphQL
- Fetching data to the frontend with GraphQL
- Styling
- Svelte directives
- Routing in SvelteKit
- Endpoints in SvelteKit
- Deploying to Netlify
- Navigation
- Mutations in GraphCMS
- Sending GraphQL Mutations via SvelteKit
- Q&A
React Advanced Conference 2022React Advanced Conference 2022
95 min
End-To-End Type Safety with React, GraphQL & Prisma
Featured WorkshopFree
In this workshop, you will get a first-hand look at what end-to-end type safety is and why it is important. To accomplish this, you’ll be building a GraphQL API using modern, relevant tools which will be consumed by a React client.
Prerequisites: - Node.js installed on your machine (12.2.X / 14.X)- It is recommended (but not required) to use VS Code for the practical tasks- An IDE installed (VSCode recommended)- (Good to have)*A basic understanding of Node.js, React, and TypeScript
GraphQL Galaxy 2022GraphQL Galaxy 2022
112 min
GraphQL for React Developers
Featured Workshop
There are many advantages to using GraphQL as a datasource for frontend development, compared to REST APIs. We developers in example need to write a lot of imperative code to retrieve data to display in our applications and handle state. With GraphQL you cannot only decrease the amount of code needed around data fetching and state-management you'll also get increased flexibility, better performance and most of all an improved developer experience. In this workshop you'll learn how GraphQL can improve your work as a frontend developer and how to handle GraphQL in your frontend React application.
React Summit 2022React Summit 2022
173 min
Build a Headless WordPress App with Next.js and WPGraphQL
Top Content
WorkshopFree
In this workshop, you’ll learn how to build a Next.js app that uses Apollo Client to fetch data from a headless WordPress backend and use it to render the pages of your app. You’ll learn when you should consider a headless WordPress architecture, how to turn a WordPress backend into a GraphQL server, how to compose queries using the GraphiQL IDE, how to colocate GraphQL fragments with your components, and more.
GraphQL Galaxy 2020GraphQL Galaxy 2020
106 min
Relational Database Modeling for GraphQL
Top Content
WorkshopFree
In this workshop we'll dig deeper into data modeling. We'll start with a discussion about various database types and how they map to GraphQL. Once that groundwork is laid out, the focus will shift to specific types of databases and how to build data models that work best for GraphQL within various scenarios.
Table of contentsPart 1 - Hour 1      a. Relational Database Data Modeling      b. Comparing Relational and NoSQL Databases      c. GraphQL with the Database in mindPart 2 - Hour 2      a. Designing Relational Data Models      b. Relationship, Building MultijoinsTables      c. GraphQL & Relational Data Modeling Query Complexities
Prerequisites      a. Data modeling tool. The trainer will be using dbdiagram      b. Postgres, albeit no need to install this locally, as I'll be using a Postgres Dicker image, from Docker Hub for all examples      c. Hasura
GraphQL Galaxy 2021GraphQL Galaxy 2021
48 min
Building GraphQL APIs on top of Ethereum with The Graph
WorkshopFree
The Graph is an indexing protocol for querying networks like Ethereum, IPFS, and other blockchains. Anyone can build and publish open APIs, called subgraphs, making data easily accessible.

In this workshop you’ll learn how to build a subgraph that indexes NFT blockchain data from the Foundation smart contract. We’ll deploy the API, and learn how to perform queries to retrieve data using various types of data access patterns, implementing filters and sorting.

By the end of the workshop, you should understand how to build and deploy performant APIs to The Graph to index data from any smart contract deployed to Ethereum.