Construye y Despliega un Backend con Fastify y Platformatic

Rate this content
Bookmark

Platformatic te permite desarrollar rápidamente APIs GraphQL y REST con un esfuerzo mínimo. La mejor parte es que también te permite aprovechar todo el potencial de Node.js y Fastify cuando lo necesites. Puedes personalizar completamente una aplicación de Platformatic escribiendo tus propias características y complementos adicionales. En el masterclass, cubriremos tanto nuestros módulos de código abierto 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 este masterclass aprenderás cómo desarrollar APIs con Fastify y desplegarlas en la nube de Platformatic.


104 min
07 Jun, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Bienvenido al masterclass de Platformatic donde puedes crear una API abierta y un esquema gráfico desde tu base de datos sin programar. El generador crea archivos de configuración y tipos para la representación de la base de datos. GraphiQL te permite consultar la base de datos y ejecutar suscripciones para actualizaciones en tiempo real. El masterclass cubre la creación de relaciones, agregar likes a entidades e implementar lógica de negocio personalizada. El backend se puede desplegar en la nube de Platformatic y cuenta con soporte para autenticación de API y métricas de monitoreo. El masterclass también presenta los Espacios de Trabajo Dinámicos, los beneficios de SQLite y Platformatic Runtime para la composición de servicios.

Available in English

1. Introducción al Masterclass de Platformatic

Short description:

Bienvenidos al masterclass de platformatic. Hoy tenemos un grupo pequeño, así que siéntanse libres de hacer preguntas. Las diapositivas y el material están disponibles en platformatic.dev.dbungall.com. PlatformaticDB es una herramienta que te permite crear una API abierta y un esquema gráfico a partir de tu base de datos sin necesidad de programar. Asegúrate de tener instalado node.js versión 18.18.0 o superior. Para comenzar, clona el repositorio o sigue las diapositivas. El masterclass es incremental y construiremos una aplicación para almacenar y dar like a películas. Ejecuta el comando 'create platformatic' para comenzar.

Hola a todos. Bienvenidos a este interesante masterclass sobre platformatic. Aquí vamos. Hoy tenemos un grupo pequeño. Así que les pido amablemente, si es posible, que enciendan la cámara, de lo contrario estaré hablando con la pared. Y realmente no quiero hablar con la pared durante tres horas o dos, o lo que sea. Hablar con la pared no es agradable. Gracias Jaroslav, Gracias Yusem, pero está iniciando y gracias Gianmarco. Hola. Hola a todos. Parece que hoy tenemos un grupo pequeño, así que días felices. Y pueden hacer las cosas paso a paso, por lo que no hay ningún problema en hacer esto. Tal vez algunas personas más se unan en unos momentos, pero veremos. Bien, siéntanse libres de hacerme preguntas, interrumpirme en cualquier momento, con suerte si lo terminamos antes de eso. Lo intentaremos, ¿de acuerdo? ¡Y eso es todo! ¿De acuerdo? Primero que nada, pueden encontrar estas URL, estas diapositivas en esta URL. Lo verán aquí, platformatic.dev.dbungall.com. Así que pueden copiar esto y pegarlo. Y también lo estoy pegando en el chat, así que aquí lo tienen. Y pueden revisarlo allí. Todo el material es público, así que pueden revisarlo.

Entonces, ¿qué es PlatformaticDB? Bueno, PlatformaticDB es la primera herramienta que creamos como parte de platformatic. Es una herramienta que te permite crear tanto una API abierta como un esquema gráfico a partir de tu base de datos sin tener que escribir ningún código. Y solo necesitas Node.js para personalizarlo y demás. Así que, sí, vamos a entrar en ello. Lo primero, por favor verifica que estás ejecutando Node.js versión 18.18.0 o superior. ¿Cómo lo haces? Puedes ir, podemos volver a nuestra terminal y espera un segundo, sí, cierra. Y podemos volver a nuestra terminal y podemos hacer node-diminusv y deberías obtener ese valor, algo así. Por favor avísame si tienes algún problema. Entonces, ¿qué hacemos para comenzar? Puedes clonar este repositorio. Ahora, si estás siguiendo las diapositivas, puedes hacer clic en este bonito botón aquí y puedes volver a tu ruta y simplemente pasar este tema y ejecutar el comando. Ejecuta el comando. Estas cosas contienen tanto los pasos. Contienen tanto los pasos como las diapositivas. Así que si abrimos esto puedes ver que tenemos estas diapositivas que son las que acabamos de mencionar y esas también son los pasos necesarios para configurar nuestra aplicación. ¿Tiene sentido? ¿Algún problema con usar Visual Studio Code? Yo tengo muchos. Yo uso Vim. Nunca lo he cerrado, así que lo siento. Sigue siendo la misma instancia. El masterclass es incremental. Así que cada paso que encuentres verás que tienes 0-1, 0-2, 0-3, y así sucesivamente. Cada uno de esos pasos es en realidad sencillo y se basa en el anterior. Así que puedes saltar pasos si quieres. Muy importante. Si no necesitas hacer nada, simplemente puedes hacer algunas cosas. Lo que vamos a construir será una pequeña aplicación que te permitirá hacer algunos tipos de APIs. Lo siento, una aplicación que te permitirá almacenar tus películas y luego darles like. Muy sencillo. Lo primero, copiamos estos fragmentos aquí y ejecutamos create platformatic. Entonces, ¿cómo lo hacemos? Bueno podemos ejecutar este código, podemos cd

2. Generador de Platformatic y Archivos Generados

Short description:

El generador crea un archivo de configuración platformatic db.json con autocompletado. También genera un archivo de complemento y tipos para la representación de la base de datos. Estos tipos proporcionan autocompletado y se cargan a través de un archivo global.tls. Al ejecutar el comando 'Cd movie quotes apps mpm start' se genera una documentación de API abierta y una interfaz gráfica. Podemos interactuar con la API utilizando varios métodos HTTP y consultar la base de datos utilizando GraphiQL. Las variables de entorno se almacenan en el archivo .env.sample, que debe ser confirmado en lugar del archivo .env.

y podemos ejecutar create platformatic. Ten en cuenta que esto dice npx create platformatic latest en latest lo que también podrías hacer es, hacer npm create space platformatic en latest. Las dos cosas son idénticas. Bien, y luego hace algunas preguntas y aquí hay algunas de las respuestas que vamos a hacer. Estamos eligiendo DB, lo estamos creando en esta carpeta. Queremos crear una migración predeterminada, crear un complemento tal vez. Sí, y no sabes TypeScript port y queremos ejecutar npm install. Luego queremos aplicar las migraciones predeterminadas y también generar los tipos. Vamos. Y omitimos las GitHub actions, no vamos a crear un repositorio para esto. De acuerdo.

¿Pudiste ejecutar el generador? Sí, pude. Solo quería preguntar qué son las migraciones, ¿qué son estos tipos generados si no estás usando TypeScript? Oh, sí. Te lo mostraré en un momento. De acuerdo. Permíteme mostrarte. Entonces, en primer lugar, qué archivos generó para nosotros. Nos generó un platformatic db.json. Este es nuestro archivo de configuración. Ten en cuenta que nuestro archivo de configuración es, lo siento, es, ves que tiene autocompletado completo. Por lo tanto, podrás completar los valores con Visual Studio Code 2 utilizando el mismo servidor de lenguaje. Utiliza variables de entorno para completar automáticamente las cosas. ¿Qué son los tipos? Entonces, aquí puedes ver que tiene un archivo de complemento, que es esencialmente estos, que es un complemento de Fastify. Hablaremos de eso en un momento. Los tipos luego se pueden utilizar para la representación de nuestra base de datos, de hecho incluye todas las propiedades. Por ejemplo, puedes ver que aquí tienes una película que tiene un id en el título, que es el contenido de la migración predeterminada. Por lo tanto, crea automáticamente para cada tabla, crea automáticamente una interfaz para cada una de nuestras tablas para que puedas ahorrar algo de tiempo. ¿Tiene sentido? Sí, sí, gracias. Y todos esos se cargan a través de este archivo global.tls que luego se carga aquí como parte del complemento. Entonces puedes usar esos tipos en este archivo de JavaScript y hablaremos de eso en un momento. Básicamente están ahí para proporcionar autocompletado. ¿Te gusta el autocompletado? ¿A quién no le gusta el autocompletado? Así que comencemos la cosa. ¿Qué podemos hacer? Cd movie quotes apps mpm start. ¿Qué nos ha generado esto? Nos ha generado una documentación de API abierta y gráfica. Podemos abrir esos dos enlaces. Echando un vistazo al primero, puedes ver que tiene get, post, put y todas las cosas que esperaríamos. Estas son básicamente cosas normales, las cosas normales que puedes imaginar. Podemos ejecutar una solicitud Slash y verás que es una matriz vacía. Potencialmente podríamos hacer post. ¿Dónde está? Post. Postea ahí una película, como por ejemplo Harry Potter. Y la ha almacenado con el ID 1. Y luego si volvemos arriba y ejecutamos la consulta nuevamente, verás que obtuvimos Harry Potter. Luego podríamos hacer lo mismo usando GraphiQL. Por ejemplo, podrías hacer una consulta como películas y título, y funciona igual. Oye, estamos en esta URL en este momento. Y puedes seguir las diapositivas antes de eso. Ten en cuenta que aquí tenemos, tenemos las variables de entorno, ¿de acuerdo? ¿Dónde rellena platformatic esas variables de entorno? Tenemos dos archivos aquí. Uno es .env, otro es .env.sample. No confirmes tu archivo .env pero sí confirma tu archivo .env.sample. ¿Por qué necesitas confirmar ese? Porque esto suele ser información personal.

QnA

Commitiendo Secretos y Suscripciones GraphiQL

Short description:

Nunca debes cometer secretos en tu repositorio de Git. Es importante limitar el acceso de tu aplicación a las variables de entorno. Con GraphiQL, puedes realizar varias acciones como obtener películas por ID, obtener todas las películas, contar películas y más. También puedes ejecutar una suscripción para recibir actualizaciones en tiempo real. Por defecto, la suscripción devuelve los últimos 10 registros para evitar fallos del sistema. Para crear una nueva tabla, revierte la migración, crea la tabla 'movies' y actualiza el comando 'DROP TABLE'. Por último, ejecuta la migración.

Y no quieres cometer secretos en tu repositorio de Git, ¿verdad, o sí? ¿Cometes secretos en el repositorio de Git? Después de haber hecho eso, puedes ver que se reemplazan aquí para que podamos personalizar las cosas. Espera. Un apunte importante aquí es que necesitas estas PLT y la puntuación para la mayoría de las claves, mientras que algunas excepciones son configurables. Además, la razón por la que es, especialmente cuando estás construyendo una aplicación, realmente no quieres que reciba todas tus variables de entorno y proporcionar una limitación como esa asegurará que tu configuración no tenga acceso a cosas que no debería tener. Así que es realmente muy importante. Lo siento por esto. Necesito un café.

Y luego, lo que puedes hacer con GraphiQL es que tienes algunas cosas disponibles, de nuevo. Puedes obtener la película por ID, puedes obtener todas las películas, contar las películas, y así sucesivamente. Algo que probablemente debería mostrar es que puedes ejecutar una suscripción, y quiero todas las películas guardadas, y para ellas quiero el título, el ID y el, Oh, lo siento. Título. Y ahora si ejecutas esto, verás que esto se mantiene abierto para siempre. Y aquí cuando almacenamos Star Wars. ¿Dónde está? Oh aquí. Va a fallar. ¿Dónde, cómo? Oh no. Sí. Lo siento. Oh, estos son get, ese es el punto. Post y esto es Star Wars. Y si lo ejecuto correctamente, ahora puedes ver que en, en GraphQL, la suscripción se ha actualizado con el último valor. Solo para demostrarte que existe la clase real de aplicación en tiempo real que es posible que podemos hacer. ¿Tiene sentido? Genial. De acuerdo. Pregunta. Sí. Así que muestra solo el último registro, no todos ellos. No se muestran todas las películas, ¿verdad? Así que debe, Sí, esta es una buena pregunta. Por defecto, devuelve los últimos 10. Por qué está limitado porque de lo contrario alguien puede bloquear tu sistema. Así que realmente no quieres devolver todos ellos. No para ti. Entendido. Lo que podemos hacer ahora es revertir las cosas y hacer algo diferente. Primero, vamos a revertir la migración. Luego, sí, esto probablemente sea útil. De acuerdo. Luego lo que hacemos es que queremos crear esta tabla aquí. Así que copiamos esto. Y vamos. Y, vamos... ¿películas? Lo siento. ¿Por qué? Sí, lo siento, estoy perdido. Oh, sí, migraciones. De acuerdo. Aquí, estamos haciendo este CREATE TABLE. Ahora, en lugar de eso, vamos a crear películas. Luego, hacemos... También necesitaremos actualizar el... DROP TABLE palabras. De acuerdo. Ahora es el momento de ejecutarlo. De acuerdo.

Jaeger UI y Suscripciones

Short description:

En la interfaz de usuario de Jaeger, ahora podemos ver las citas. ¿Hay múltiples suscripciones? La plataforma crea automáticamente una suscripción para cada entidad. Sin embargo, es posible que necesites hacer algún trabajo de extensión para personalizarla. He creado una suscripción llamada 'citas guardadas'. Al ejecutarla, el código se bloqueó debido a un cambio. Después de recargar, el código de la suscripción se guarda con un poco de texto. Puedes ejecutarlo y realizar una solicitud POST.

Como puedes ver ahora, en nuestra interfaz de usuario de Jaeger, ahora tenemos... ¿Oh, no lo hice? Lo siento, pensé que lo había hecho. De acuerdo. Sí, esto está vacío, de acuerdo. Entonces, si recargo esto, sí, no se define ninguna operación. Luego, si entro aquí, guardando citas y guardando... Perfecto. De acuerdo. Ahora, si recargo esto, verás que tenemos las citas. Genial.

¿Alguna pregunta hasta ahora? No sé, no veo preguntas y no veo nada. Es realmente muy difícil. Matthew, ¿se creó automáticamente la suscripción? ¿Hay más de una? ¿O hace una guardada para cada entidad? Tú. Esta descripción crea una conexión de sitio web con el servidor. Y puedes crear tantas como quieras. Sí, pero normalmente el navegador solo creará una. Eso es lo que quieres hacer. Así que supongo que soy muy precioso en el navegador. Correcto. La plataforma crea automáticamente una para cada entidad llamada como tenías 'película guardada' como nombre de suscripción que se creó automáticamente al inspeccionar la database. No, por el momento, probablemente necesitarás hacer algún trabajo de extensión para que las cosas funcionen de esa manera. Sí. ¿Tiene sentido? ¿Puedes repetir la pregunta? En realidad, tal vez te di una respuesta incorrecta. Lo siento. No te vi crear la suscripción. Así que asumí que se hizo automáticamente. Sí, no lo hice. He creado esta suscripción. Así que aquí tenemos esta suscripción. Puedo ejecutarla. Oh, sí, se bloquea. Ay, se bloqueó. Oh, sí, se bloqueó porque lo cambiamos. De acuerdo, esto es 'citas guardadas'. Así que vamos a recargarlo. Así que aquí tenemos un código de suscripción guardado, que tiene un poco de texto. De acuerdo. Esta es una cita. Puedo ejecutar esto. De acuerdo. Sí. Luego puedo hacer una solicitud POST. Y mira, si lo abres. Podemos ver en el inspector. Vamos a ejecutarlo, de acuerdo, así que verás que hay un WebSocket sucediendo. De acuerdo. Ahora puedo aquí puedo hacer un POST. Y puedo decir. Estoy omitiendo el.

Creación de Suscripciones y Relaciones

Short description:

Creamos automáticamente suscripciones para ti, las cuales pueden ser desactivadas si así lo deseas. Vamos a crear una relación con este contacto y realizar las migraciones necesarias. Después de aplicar las migraciones, podremos ver los tipos generados y la documentación global actualizada. Ahora, vamos a enfocarnos en la interfaz gráfica y observar la presencia tanto de citas como de películas. Vamos a crear una película y guardarla como 'El Mago de Oz'. Por último, examinemos la cita 'La vida se trata de enfrentar tus miedos y desafíos'.

De acuerdo. Guardo esta información. He recibido eso como carga útil. Sí, por lo tanto, se crean automáticamente estas suscripciones. No necesitas escribir ningún código. No. Es automáticamente, no. No necesitas crear ninguna suscripción. No, esto es automático. Están disponibles automáticamente para ti. Puedes desactivarlas si así lo deseas. Podemos hablar un poco sobre cómo se implementan internamente. De acuerdo. Si quieres más adelante. Y sí.

Ahora estamos creando una relación. Así que lo que puedes hacer es crear una relación con este contacto, por lo que podríamos hacer y la plataforma attic. Migraciones de la base de datos. Crear un archivo. De acuerdo, se crean dos cosas, los archivos de hacer y deshacer. Así que podemos ir a las migraciones. Y en hacer, lavamos la información. Y luego aquí publicamos lo otro. Tendrá sentido. De acuerdo. Así que podemos hacer NPS platform at the dB migrations. Aplicar. De acuerdo. Puedes ver que se generaron los dos tipos y se actualizó la documentación global. Sí. Así que si lo miras. De acuerdo, y aquí vamos a las citas de películas. Y tenemos los tipos que tienen la película y nuestra cita. Así que veamos nuestro nuestro dragger primero. Puedes ver que tenemos citas, pero ahora también tenemos películas. Y ahora tenemos tanto citas con ID, como películas con ID de citas. ¿Tiene sentido? Genial.

Entonces Lo que queremos es crear una película. Así que aquí vamos y sí, esto es título. Eso se guarda. Oh, no es título. Tal vez nombre. Aquí tienes. De acuerdo, hemos guardado 'El Mago de Oz' como película. Vamos a ver la cita. Y 'La vida se trata de enfrentar tus miedos y desafíos'. De acuerdo. Y. Lo que podemos hacer es ejecutar esto. Lo que podemos hacer es decir la cita.

Ejemplo Gráfico y Base de Datos de Semillas

Short description:

Podemos guardar una cita con una idea y un título, junto con un ID de película. También podemos recuperar el nombre y el título de una película, junto con sus citas. Es importante evitar solicitar la misma información varias veces, ya que puede causar problemas. Además, podemos generar un esquema de GraphQL usando 'npm run platformatic schema'. La base de datos de semillas es útil para crear datos estándar en el sistema.

De acuerdo, y vamos a un ejemplo gráfico. Y copiamos esto. Y guardamos una cita que tiene una idea y un título, y tiene una película con ID uno, que es nuestro secreto del corazón. Creo. Déjame verificar. No, hay alguien. De acuerdo. Soy Gabriel. Hola a todos. Sí. Con el dispositivo es 1.

De acuerdo. Entonces. De acuerdo. De acuerdo. Ahora lo que podrías hacer es algo como esto. Así, una película tiene un nombre. Y el título. Perdón, hice un nombre, pero tiene algunas citas y luego podrías hacer el final. Título. En realidad, la película, perdón, son relaciones y queremos el ID y el título. El nombre de la película. Y lo ejecutamos y como puedes ver, cometí un error, en realidad. Oh sí, por supuesto, así que ves, tenemos nombres de películas, citas, ID de película, película ID. De acuerdo, así que está dando una vuelta completa y podríamos simplemente poner cita cita. Así que puedes ver que puedes meterte en problemas muy fácilmente porque si estás solicitando lo mismo varias veces, puede ser problemático para ti. Correcto. De acuerdo, oh. Genial. De acuerdo. Así que aquí puedes ver que tenemos todo. También puedes generar automáticamente un esquema de GraphQL muy fácil de ejecutar 'mpx run platformatic schema'. GraphQL para generar tu SDL que puedes usar por cualquier motivo. Ahora. Echemos un vistazo a la base de datos de semillas, porque la semilla es realmente útil para crear un conjunto de datos estándar en tu sistema que de otra manera tendrías que crear. Tendrías que hacer comprobaciones en tiempo de ejecución y cosas así para crearlo, así que es mejor hacerlo ahora. Entonces lo que hacemos es copiar la cita y la película. Y luego ejecutamos la cosa. De acuerdo. Genial. Hagámoslo. Cópialo. c.js, guardamos esto. De acuerdo.. oh tällö Necesitamos algo de código aquí. c. De acuerdo.. Y luego en este array de citas aquí.

Ejecución de Semillas y Aplicación de Migraciones

Short description:

Tenemos este archivo. Ahora puedes ejecutar platformatic.dbseed. Oh, falta el archivo de semillas. ¿Qué error cometí? Oh, no es gráfico. Podemos copiar esto o simplemente eliminar estas cosas. Lo siento, lo hicimos. Podemos aplicar nuestra migración. ¿Alguna pregunta? Tenemos dos películas y citas. Ejecutemos la semilla nuevamente. Necesitas restringir los nombres de las películas. Vamos a eliminar. Ahora necesito aplicar primero. ¿Por qué? Trajiste ver el avión antes. Muchas gracias. Has creado bastantes de ellos. Ahora podríamos comenzar a refrescarlo.

Tenemos este archivo. De acuerdo. Hola, hola, Gabrielle. Entonces, de acuerdo. Ahora lo que puedes hacer es platformatic. dbseed. De acuerdo. Oh, falta el archivo de semillas. Y. Oh, ¿qué necesitaba? ¿Qué error cometí? Oh, no es gráfico. Eso es un problema. Correcto, y es. Verdad? y esto es. Esto es. Podemos copiar esto. O simplemente podemos eliminar estas cosas. De acuerdo. De acuerdo. Entonces, si entro en completo. De acuerdo, lo siento, lo hicimos. De acuerdo. Es. Bueno, no, técnicamente está bien. Y podemos aplicar nuestra migración. Cruzando los dedos. De acuerdo. Y. ¿Alguna pregunta está ahí? Y tenemos las dos películas y citas. Y nuestra plataforma. Fuimos simplemente perfectos. De acuerdo. Ahora. Oh. Ejecutemos la semilla nuevamente. Oh, necesitas restringir los nombres de las películas. Sí, vamos a eliminar. Ahora necesito aplicar primero. De acuerdo. Oh. ¿Por qué? Trajiste ver el avión antes. Sí, sí, gracias. Muchas gracias. Sí. Y es. C punto JS. De acuerdo. Has creado bastantes de ellos. Ahora podríamos hacer. Comenzar a refrescarlo.

Agregando Botón de Me Gusta e Incrementando los Me Gusta

Short description:

Hemos aplicado con éxito el personal y ahora podemos ver todas las consultas complejas que se representan correctamente en JSON. Podemos crear una cita y agregar un botón de Me Gusta generando SQL utilizando co-pilot. Al aplicar la migración, podemos verificar fácilmente el tipo de resultado y ver la columna 'likes' agregada. También podemos agregar una ruta para incrementar los Me Gusta de una entidad utilizando nuestro complemento. Además, podemos agregar otra ruta y usar una biblioteca como fluentJSONSchema para escribir el esquema JSON.

Correcto. Oh, y oh, porque se está ejecutando. ¿Dónde lo puse? Lo siento. Lo puse en algún lugar. Estoy bastante seguro. Y. Ya sabes. No estoy seguro de dónde estaba.

De acuerdo, de acuerdo, así lo hemos hecho. Estamos aplicando el personal. Entonces, MPX, lo siento por esto, platformatic DB staff. Ahora, una vez que hayamos hecho eso, ¿dónde lo puse? Está ahí. De acuerdo, se está ejecutando, ¿de acuerdo? Así que ahora estamos aquí, y podemos verlo y tenemos todas las cosas de las que estábamos hablando, ¿de acuerdo? Pero también podríamos ejecutar esto y ver que tenemos todas nuestras consultas complejas que se representan correctamente en JSON, ¿verdad? ¿Pueden levantar la mano? ¿Funcionó para ustedes? ¡Yay, genial! ¿Los demás, están siguiendo? De acuerdo. Bien, bien, bien, bien, bien, bien, de acuerdo. ¿Qué vamos a hacer ahora? Después de haber construido nuestra API muy rápida con estas cosas, lo que podemos hacer es esencialmente crear una cita, agregar una herramienta de funcionalidad, agregar un botón de Me Gusta, ¿puedo darle Me Gusta a una cita? Entonces, ¿cómo podemos hacer eso? En realidad es muy simple, podemos tomar esta parte de SQL y luego lo que podemos hacer es npx platformatic db migrations create. Esto crea un par de cosas para nosotros así que este es el árbol de migración y aquí estamos, luego podemos guardar esto, luego podríamos pedir una cosa, si no sabes cómo generar SQL, puedes pedir compilar. así que elimina la columna likes de la tabla equals, y puedes hacerlo fácilmente con co-pilot. Incluso puedes pedir que escriba la consulta para hacer eso, como puedes hacer aquí, puedes hacer agregar la columna likes a la tabla quotes, y aquí después co-pilot, oh sí, aquí vamos. De acuerdo, oh, Fabio ha vuelto. De todos modos, podrías generar cosas usando co-pilot si quieres. Ahora vamos aquí y aplicamos. Hemos agregado eso. Podemos verificar fácilmente cómo funciona correctamente al mirar el tipo de resultado, por ejemplo, de nuestra ruta de citas aquí que dice likes, pero también podrías echar un vistazo a nuestro grafico interno y por ejemplo, echar un vistazo al tema de la cita y ver que tenemos un likes que es un número entero. Genial, ¿verdad? Ahora, ¿qué podemos hacer aquí? Podemos... Queremos agregar una ruta que nos permita incrementar nuestros... los Me Gusta de una entidad. ¿Cómo lo hacemos? Tenemos nuestro complemento que hemos escrito aquí. Ten en cuenta que podríamos haber hecho eso... que el generador lo generó para nosotros. Así que es bastante genial. Todos estos bonitos comentarios son necesarios para que... el autocompletado funcione correctamente. Entonces, y lo que queremos agregar... sí, de acuerdo, vamos a probar cosas. Así que primero, podrías hacer log info my-plugin cargado. Y si volvemos aquí, verás que acabamos de cargar my-plugin. Bien, ¿verdad? No puedo oírte, Tom, si estás hablando. De acuerdo, esto es realmente genial. Ahora, lo que puedes hacer... por ejemplo, podríamos agregar otra ruta, digamos, llamémosla a low. Y esto es solo una ruta normal de fastify, así que esto devuelve word. Podemos guardar esto, sabiendo que automáticamente redirige cosas para nosotros. Entonces, lo que podríamos hacer es 304 a low, y acabamos de obtener word, muy pequeño, aquí. ¿De acuerdo? Genial. Podemos eliminar esto porque no es lo que queremos. Lo que queremos, queremos agregar un post. Ahora, si estás usando TypeScript, probablemente quieras usar algo como typebox. Voy a usar una biblioteca que funciona bien con JavaScript, pero podrías usar lo que sea. Normalmente, no me gusta escribir el esquema JSON por completo.

Incrementando Me Gusta con Consulta SQL

Short description:

Podemos incrementar el contador de Me Gusta de una cita utilizando una consulta SQL. Este enfoque nos permite realizar la operación en una sola consulta, lo que la hace atómica y eficiente. Otros métodos, como el uso de un ORM, requerirían múltiples consultas a la base de datos y aumentarían el riesgo de conflictos. Para probarlo, podemos usar el comando 'request post' y ver cómo se incrementan los Me Gusta en la API abierta. Sin embargo, en este caso, la suscripción no se actualizará porque no estamos notificando al sistema después de ejecutar la consulta SQL personalizada.

así que termino escribiéndolo usando esta rutina llamada fluentJSONSchema. Entonces, lo que podemos hacer es cost esquema y decir que esto es para los parámetros de las cosas, que es un objeto, que es, perdón por eso, que es una función de las funciones, y la función, que se llama id, y es del mismo tipo que getSchema, mira, podemos obtener el esquema de una cita, que se agrega automáticamente para nosotros, y esto es properties.id.

Ten en cuenta que aquí podríamos hacer, por ejemplo, app.log.info, podríamos hacer cita, y copiemos esto para que puedas ver qué hay aquí, y si vamos aquí, falta el módulo. Npm iluent.json schema. Ahora, puedes ver que estos se recargan automáticamente y tenemos nuestro bonito esquema JSON de gramática de nuestra cita automáticamente completado. Genial. En iCode aquí, agreguemos mis rutas. Queremos agregar un post a citas, y este es el ID que es el parámetro, y luego like, y este es el esquema y así sucesivamente. Ahora, lo que queremos hacer, queremos hacer un más uno. ¿Sabes cómo hacer un más uno en SQL? No tengo idea, así que si no tienes ni idea, puedes preguntarle a un copiloto. Podrías hacer algo como escribir consulta SQL para incrementar el contador de Me Gusta de la cita con un ID dado. Veamos qué me genera, y bien. Probablemente no sea correcto, pero algo que funcionará muy bien. Aquí, en lugar de hacer eso, estamos haciendo cost. No es necesario. Lo que vamos a hacer es esperar a app.platformatic. Ves que se autocompleta. Necesitamos obtener el db y SQL de app.platformatic. Ahora podríamos hacer await db.query. Sí, y luego aquí va SQL. Esto es una de esas cosas bonitas de cadena de destino y pan. Aquí vamos y copiamos esto. No es necesario esto. Entonces, ¿dónde está el id? Es id. ¿Qué es? Es muy parecido a eso. Sí, queremos devolver likes. Aquí está el resultado, y luego devolvemos result[0], que es una fila. Genial. Nuevamente, la mayor parte de esto es escribir SQL. La mayor parte del tiempo le pido a un piloto que escriba mi SQL o el chat de GPT es muy directo cuando haces ese tipo, así. La parte importante de hacer esto de esta manera utilizando SQL es que puedes hacerlo con una sola consulta. Solo una consulta enviada a la database y eso es atómico. De lo contrario, si lo haces con cualquier ORM o cualquier tipo de eso, necesitarías leer tus data y luego guardar los data nuevamente en la database dentro de una transacción, lo que serían dos consultas a la database y haría que las cosas sean súper lentas. Bueno, al menos más lentas y con más riesgo de conflictos. En cambio, esto te permite hacer cosas y serializarlas. Entonces, la database puede tener un tiempo mucho más fácil al entrelazar las consultas si llegan a ser. Si ves muchos Me Gusta hechos al mismo tiempo, este es el comando que quieres hacer. Leer los data y guardar los data. Es decir, dos consultas. ¿Tiene sentido? Sí, de acuerdo. Entonces, ¿cómo probamos esto? Bueno, copiamos este comando, ves, request post. Así que aquí podemos ejecutar esto y mira, podemos incrementarlo. Y luego incluso podemos verificarlo desde nuestra API abierta. Y como puedes ver, esto ha sido ID uno con 10 Me Gusta. Genial. Y la suscripción también se actualizará, ¿verdad? Por supuesto. Bueno, sí, perdón, sí y no. En este caso, la suscripción no se actualizará y te mostraré por qué. Entonces, si haces cita guardada y cargas esto, verás que esto está hecho y esto no se está actualizando. Y la razón de eso, es que no estamos notificando al sistema porque acabamos de ejecutar una consulta SQL personalizada y no estamos pasándola a través de ningún JavaScript. Entonces, no es posible para nosotros, para el sistema hacer eso.

Platformatic MQ y la Interacción de Entidades

Short description:

Permíteme intentar hacer eso. Tenemos eventos SQL para el tema de publicación de la entidad y el tema de suscripción. Platformatic MQ es nuestro sistema de publicación-suscripción para las suscripciones. Necesitamos obtener la entidad y la cita, junto con el tema para publicar. Nos falta el contexto, que es necesario para la autorización y otras funcionalidades. El código necesita más depuración, ya que hay variables indefinidas y referencias API faltantes.

Permíteme intentar hacer eso. No creo que esté documentado. Así que platformatic. ¿Dónde está? Y. Entidades. Como si hubiera un módulo para manejar esas cosas. Déjame ver. Esta es en realidad una buena pregunta. Que probablemente valga la pena verificar. Así que aquí tenemos eventos SQL aquí y eventos SQL es obtener, oh, el tema de publicación de la entidad. Sí. Y el tema de suscripción. Así que solo estoy verificando cuál es el mejor. Así que tenemos la entidad. Solo verificando, ¿dónde está, oh, sí. Sí, lo es. De acuerdo. Entonces, esto es lo que podríamos hacer. Así que aquí. Tienes esto llamado app platformatic punto, oh, no se ha ido por completo. Buen material, encontré un error. De acuerdo, así que aquí vamos. Esto es platformatic. MQ es nuestro sistema, es ese pequeño sistema de publicación-suscripción que usamos para las suscripciones. Entonces, para, esto se puede usar tanto en proceso como en radio. Entonces, lo que puedes hacer es app dot log dot info MQ. Y veamos si esto es correcto, si lo puse correctamente. Oh, y, ¿dónde está? Muy bien. Oh sí, perdón, cometí un error, sí, es verdad. Y esto necesito hacerlo, necesito hacer mi curva, ¿de acuerdo? Y sí, ves que esto es el MQ, ¿de acuerdo? Así que tenemos el MQ y lo que acabamos de hacer, necesitamos obtener la entidad. Entonces, y la entidad es la entidad y esto es, nuestra entidad en este momento es ¿qué crees? Entonces, y equals entidad? Ves que está ahí. Ahora, necesitamos obtener la cita y necesitamos obtener el tema para publicar las cosas. Entonces y nuestro payload va a ser un ID, que es el ID de las cosas y cosas geniales. Nos faltan algunas cosas. No se necesita nada de esto, solo podemos esperar esto. Bien, uno de más. Bien, y esto es solo nuestro payload y tenemos el tema, tenemos el payload, estamos resolviendo, nos falta el contexto. Se necesita el contexto para que funcione el sistema de autorización y otras cosas, Obtén el contexto así, Rack.CTX. En realidad no lo recuerdo, esto es, lo informamos como CTX, pero estoy bastante seguro de que no es eso. Así que vamos a verlo. Esto va a fallar. Sí. Oh, cita de, oh, esto es entidades. Aquí vamos, y Action no está definido. Vamos a verlo. Sí, de hecho, está vacío. Aquí tenemos el, no recuerdo la API para eso. Sí. Interacción.

Actualizaciones en tiempo real e Implementación de GraphQL

Short description:

Puedes recibir notificaciones en tiempo real cada vez que algo se actualiza. Si necesitas activarlo manualmente, funcionará. Ten en cuenta que si tienes configurada la autorización en el sistema, todo se aplicará automáticamente. Funciona como esperarías. También podemos implementarlo como GraphQL. Se realiza un cambio mínimo en la respuesta, devolviendo un objeto con la cantidad de likes.

¿Dónde está? Texto, ¿y dónde está? Se está creando. Por, no puedo recordar, y no parece que lo haya documentado donde quería que estuviera. Aquí lo tienes, y creo que está aquí. y, oh, espera. No, no está aquí. Está en el contexto de Platformatic. Vamos. Muy estúpido de mi parte. De acuerdo. Y luego tenemos el contexto. Ahora podemos ejecutar esto. Action no está definido. ¿Dónde está action? Oh, action. Guardar. De acuerdo. Ahora podemos ejecutar esto. De acuerdo, esto funcionó. Así que intentemos de nuevo si nuestro gráfico está funcionando. De acuerdo, el puerto se guardó. Y luego ejecuto mi publicación, y ahora funciona completamente. Muy bien. Bueno ver también. Sí, no lo hice. Esto no estaba planeado para la masterclass. Y necesito, estoy tomando un post-it, porque encontré algo sobre los tipos. Agregar Platformatic a la documentación y a los tipos. De acuerdo. Genial. Básicamente, puedes recibir notificaciones en tiempo real cada vez que algo se actualiza y demás. Y si necesitas activarlo manualmente, funcionará. Algo así. Ten en cuenta que si tienes autorización configurada en el sistema, todo se aplicará automáticamente en este punto, por lo que esto se aplicará automáticamente cuando esto suceda. Tiene sentido, sí, esperemos que sí. De acuerdo. Genial. Uhm, de acuerdo. Sí, probablemente debería crear un poco de algo para simplificar esto, pero sí, de todos modos. Funciona como esperarías, genial. De acuerdo, así que hemos hecho eso, ¿de acuerdo? Y también podemos implementarlo como GraphQL. De acuerdo, así que. Sí, tal vez queramos implementarlo como GraphQL. Entonces. Aquí, lo que hacemos es un cambio mínimo. Y. Hagamos un cambio mínimo aquí. La respuesta. Y doscientos y como un objeto queremos un objeto y likes que es un número. De acuerdo. Y aquí lo devolvemos.

Incrementando Likes de una Cita

Short description:

Incrementamos los likes de una cita utilizando una función sink y el ID de la cita. Después de recargar, el sistema devuelve la cantidad actualizada de likes. La documentación de Swagger también refleja el like agregado con el esquema correcto.

OK. Ahora aquí hacemos un sink. Función. Hacer like. Incrementar like qué. I.D. Y podemos tomar esto. Necesitamos dos cosas aquí, necesitamos el ID en contexto, porque hemos hecho cosas diferentes en comparación con el tutorial, cosas buenas. Tomamos esto. Tomamos esto. Y tomamos esto. De acuerdo. Y luego aquí hacemos. Espera, como pensé en el CTX. Ten en cuenta que este sistema se recargó automáticamente, y ahora está devolviendo diecisiete likes. Y también si vamos a nuestro Swagger, ahora verás que nuestro like se agregó aquí. Y que tiene un esquema de like, esto está llenado correctamente. De acuerdo. ¿Tiene sentido? Sí. Genial.

Agregando Mutación de Me Gusta a una Cita y Trabajo en la Interfaz de Usuario

Short description:

Agregamos la mutación de Me Gusta a una cita utilizando Mercurius. Durante la masterclass ocurrió un error inesperado, pero fue solucionado. La funcionalidad de recarga automática tiene un error con algunas condiciones de error. Ahora es momento de trabajar en la interfaz de usuario. Copiamos y pegamos la interfaz creada por un diseñador de front-end. Instalamos las dependencias y comenzamos la interfaz de usuario. Todo ya está funcionando, pero hay un error de red debido a CORS. Solucionamos el problema de CORS y ahora funciona correctamente.

De acuerdo, lo que queremos hacer es agregar la mutación de Me Gusta a una cita, de manera muy sencilla. Podemos copiar esto de las diapositivas, de acuerdo. Ahora, podríamos agregar una mutación. Esta guía gráfica proviene de una biblioteca llamada Mercurius. Así que tenemos esto y luego agregamos nuestra mutación incrementQuoteLikes. Guardamos esto. Y ahora podemos recargar esto. Veamos si todo funciona como se espera. Y podríamos ejecutar nuevamente nuestra mutación de guardar cita. Y aquí podemos hacer una mutación como cita id 1. Y queremos el, oh, y esto es solo un número. Nos gusta esto. Oh, ¿y qué hice mal? Ah, hay un error. Interesante. Genial. Bueno. Esto fue inesperado y no exactamente lo que quería tener durante la masterclass. Cosas interesantes. Y si te encuentras con este tipo de cosas, podrías desactivar por un segundo el modo de observación, que desafortunadamente es el problema de esta cosa. Y lo siento por eso, y lo solucioné. De acuerdo, pensé que los había cubierto todos. Ahora esto se está ejecutando nuevamente y si ejecuto esto. Espera. No, esto no debería. Recarga automática. Falso. Oh, incrementQuotesLike no está definido. De acuerdo, ahora encontré el problema. Es como un puerto. De acuerdo, como un puerto. Sé de dónde vino eso. Maldición. De acuerdo. Necesito pensar si hay una forma de solucionar este problema. De todos modos, eso es, y ahora podemos intentarlo nuevamente, y está funcionando. Bueno, necesito iniciar esto nuevamente, y está funcionando como antes. Genial. De acuerdo, puedo volver a habilitar, hay un error en la funcionalidad de recarga automática con algunas condiciones de error, así que la recarga automática es realmente genial, pero de vez en cuando tiene errores. Así que comencemos esto nuevamente, y aquí vamos. Sí, lo hemos logrado. Ahora, ¿cómo te va hasta ahora? ¿Pudiste seguir? Excelente. ¡Yay, de acuerdo! Ahora es momento de trabajar en la interfaz de usuario. La forma en que lo vamos a hacer, van a hacer el trabajo de la interfaz de usuario de la misma manera en que yo hago el trabajo de la interfaz de usuario. Así que hay un diseñador de front-end fenomenal en mi equipo que lo crea para mí, y yo solo lo copio y pego, ¿de acuerdo? No sé si te gusta, le agregamos un poco de, de acuerdo. Así que cp, en realidad cp-r, no, pasos, de acuerdo? DAU7UI, Movie Quotes, Apps, MovieQuotesFrontEnd, aquí, oh, sí. Ahora podemos ingresar a MovieQuotesFrontEnd, MPMI, se está construyendo, lo cual siempre lleva más tiempo, no sé por qué. De acuerdo, ahora podemos hacer npm install en esto, y podemos abrir esto, y como puedes ver, todo ya está funcionando, pero si hago clic en esto, no funciona. ¿Por qué crees que no funciona? Error de red al buscar, oh, cuál es, el, y lo que a todos les encanta, CORS. Maldición, en realidad es CORS. Eso fue parte del problema, ¿de acuerdo? Entonces lo que necesitamos, es simplemente hacer esto y agregar esto a CORS, de acuerdo? Y ahora puedo, podemos volver aquí, y así, oh, disculpa, así y ahora funciona.

Desplegando el Back-end en Platformatic Cloud

Short description:

Ahora puedes ver que todo funciona como se esperaba. A continuación, desplegaremos nuestro back-end en Platformatic Cloud. Una vez desplegado, recibirás una URL donde se puede acceder a la aplicación. Puedes probar ejecutar consultas y mutaciones para interactuar con la aplicación desplegada.

Ahora puedes ver que funciona, genial. Puedes ordenarlos y demás, y puedes ver las consultas. Si vas e inspeccionas aquí, puedes ver las consultas de GraphQL que se están realizando y demás. Perdón, ¿dónde está, sí, ordenar, sí, carga útil. Aquí está la consulta, así que aquí vamos. De todos modos, bastante genial. Puedes probar y todo está más o menos funcionando como esperarías. Oh sí, esto puedo cerrarlo, está bien. Volviendo a las diapositivas, sí. ¿Lo has hecho bien hasta ahora? Sí, bien, entonces el siguiente paso es muy simple y vamos a desplegar nuestro back-end en Platformatic Cloud. Así que puedes ir a Platformatic Cloud, iniciar sesión con GitHub. Ahora, vamos a destruir el Cloud con todas las personas haciéndolo al mismo tiempo. Veamos si se mantiene en pie. Y puedo crearlo, poner tutorial de citas de películas, crear aplicación, y esto lo llamaremos el Espacio de Pruebas y no cambies los dinámicos. El dinámico es el de las PR. Así que simplemente no deshagas eso y estoy creando uno aquí.

De acuerdo, ahora eliminaré estos, así que no compartas estas dos cosas porque no se pueden desplegar. Podrías desplegarlo como yo si copias estas dos cosas. Estoy descargando este archivo llamado testplt.txt, así que haz clic aquí. Así que debes hacer clic en este. Este es el botón en el que debes hacer clic. Después de haber hecho eso, continúa. Lo que puedes hacer después de volver aquí, es mover el archivo que acabas de descargar, microbios, y testplt.1 y lo llamaré keys. De acuerdo. Luego solo tienes que hacer npx, plt, deploy, guion, guion, keys, keys. Empaquetándolo, desplegándolo en la cloud. Dependiendo de tu ancho de banda, esto puede ser lento o rápido, depende de cuántas cosas tengas. Es posible que desees hacer npm prune. Hay muchas cosas que se pueden mejorar. PLT es un alias para platformatic. Sí, puedes usar PLT en lugar de platformatic. Parece un poco largo platformatic. Así que es un alias para eso. Y una vez que la aplicación esté desplegada, obtendrás una bonita URL llamada billowingexcitingreceptivedolls.deploy.space. Tarda más o menos un minuto, minuto y medio en iniciar las cosas por primera vez. Una vez que está en funcionamiento, es mucho, mucho más rápido.. Y bien, la aplicación ha iniciado y está. Oh sí, aquí está. Y esto es exactamente lo mismo que hicimos antes. Así que esto es las citas, tenemos nuestra mutación. Tenemos nuestro Me Gusta de la cita. Correcto ahora es la pregunta. ¿Tenemos alguna cita aquí? Podemos intentar hacer una consulta. Y eso es para cualquier cita. Y tenemos nuestras citas porque ¿por qué? Porque esto respalda nuestra SQL lite D. B. De acuerdo, así que puedes eliminar esto si no quieres que esté ahí, pero está ahí y vamos a aprovechar esto porque voy a hacer trampa y luego solo te mostraré que lo que realmente podemos hacer es nuestra suscripción y cita guardada y queremos el id y los Me Gusta y las propias citas. Oh no, solo es el id. ¿Cuál es la cita? Así que aquí. Podemos ejecutar esto luego aquí.

Autenticación de API y Lógica de Negocio Personalizada

Short description:

Podemos hacer una mutación. ¿Puedo hacer una pregunta? ¿Es posible ejecutar un fragmento de código antes de esta API? Digamos un verificador de lenguaje ofensivo, ¿vale? Sí, por supuesto, es posible. Necesitamos usar el concepto llamado Hooks.

Podemos hacer una mutación. Como qué I D uno y lo ejecutamos y aquí. Todavía sigue saliendo lo mismo. Notifícame poniendo. Estoy poniendo las luces aquí. Es entonces correcto de nuevo. Y todo esto va y viene a la cloud y de vuelta y así sucesivamente ahora si estás usando nuestra instancia pasada o cualquier otra cosa entonces todo seguirá funcionando exactamente igual que acabo de mostrar pero desplegado usando eso pudimos desplegar mientras tanto. ¿Puedo hacer una pregunta? Sí, lo siento, me uní tarde y todavía estoy tratando de entender esto. Entonces, según entiendo, esta plataforma Flatformatic es una es una herramienta para proporcionar APIs para la database, ¿verdad? Una Base de Datos Platformatic. Sí. Eso es lo que estamos haciendo en la versión por ahora ahora mismo. De acuerdo, y estas APIs son tanto para Open API como para APIs de GraphQL. Sí, de acuerdo. Y la interfaz de usuario que mostraste se crea en un repositorio separado base de puerto separado como un servidor separado o lo siento, ¿te refieres a la interfaz de usuario de QuotsApp? Sí, de acuerdo, sí. De acuerdo. Entonces, este front-end es una base de puerto separada que utiliza las APIs proporcionadas por la plataforma. Sí, de acuerdo, entendido, entendido. Sí, estos son ajustes muy típicos, normalmente tienes tu front-end construido si estás construyendo una SPA completa y una SPA completa tienes tu front-end ejecutándose y construido en ejecución y desplegado en next, por ejemplo. Lo siento, ahí se ejecuta y despliega y se sirve desde S3 y eso es esencialmente o algo así. Sin embargo, si tienes tu personal usando algo como react server component o algo así, normalmente lo tienes ejecutándose en la cloud, normalmente lo tienes ejecutándose en la cloud y sirviendo cosas de forma dinámica esencialmente. Entendido, entendido. Y esta API, ¿podemos agregar algún middleware, por ejemplo, para autenticación? Antes de acceder a la API, quiero hacer autenticación. Sí. Si vas a nuestra documentación, déjame abrir una nueva pestaña. Si vas a la documentación, en la referencia, hay un tema completo aquí sobre autorización. Y puedes ver estas secciones de estrategia. Puedes usar el token JWT y/o simplemente encabezados HTTP, si quieres, y poner el rol. Así que puedes pasar por esto. Básicamente, lo que quieres, es poner el rol como una afirmación dentro del token JWT. Esto es realmente muy importante. Esto se va a mapear. Por ejemplo, x-platformatic-role. De acuerdo, y puedes usar un webhook o simplemente encabezados HTTP, pero esto en realidad no es muy bueno. Por razones obvias. Y luego puedes especificar eso, puedes especificar algunas reglas. Aquí puedes decir, por ejemplo, que solo, así que este bloque dirá que solo un usuario puede encontrar, puede mostrar sus propios datos. Entonces, básicamente, si tienes una columna de userid, entonces quieres que esa columna de userid sea igual a dividir este valor en el token, en el token WT, cuando ejecutes cualquier operación de lectura, básicamente. Y así sucesivamente. De acuerdo, esto es genial. Así que en realidad es bastante poderoso para empezar. Así que estoy muy, esto es realmente muy útil. Tengo una pregunta más, pero lo comprobaré. ¿Está bien si sigo adelante? No, adelante. En el último caso está bien. No somos muchas personas, así que, sí, por supuesto. ¿Es posible ejecutar un fragmento de código antes de esta API? Por ejemplo, si estoy tratando de crear, digamos una cita? De acuerdo, pero quiero que se ejecute mi lógica de negocio personalizada antes de que se cree la cita. Digamos un verificador de lenguaje ofensivo, ¿vale? Algún fragmento de código que he escrito que hará algunas validaciones de negocio en una entidad. De acuerdo, sí, por supuesto, es posible. Necesitamos usar el concepto llamado Hooks. Está aquí.

Interceptando Solicitudes y Monitoreando Métricas

Short description:

Puedes interceptar solicitudes antes de que se ejecuten y realizar acciones personalizadas utilizando la función AddEntityHooks. Esta función sigue un patrón de interceptor y te permite llamar a la función principal y realizar acciones adicionales. Funciona de manera similar al módulo dbAuthorization, que alimenta los mecanismos de autenticación y autorización. Puedes interceptar solicitudes en dos niveles diferentes: antes de que la entidad se guarde o antes de que se reciba la solicitud. Normalmente, usarías el nivel de entidad, pero también puedes interceptar todas las solicitudes. Además, puedes usar los hooks de Fastify para ejecutar código antes de que se procese una solicitud. Esta funcionalidad se puede aplicar a rutas que no generas tú mismo. Es una característica poderosa que proporciona flexibilidad y opciones de personalización. También puedes monitorear el número de solicitudes, la latencia, la cola de servicios y otras métricas en los detalles de la aplicación. Los registros también están disponibles para su visualización y se están realizando esfuerzos para mejorar su legibilidad.

Y tienes en SQL Mapper, EntityZooks. Y básicamente lo que quieres especificar se llama esta función llamada AddEntityHooks. Y podrías simplemente hacer eso para ejecutar cosas antes y después. Es un patrón de interceptor, por lo que necesitas llamar a la función anidada para ejecutarla. Y lo siento, es un patrón de interceptor, no un patrón de middleware. Y básicamente, solo llamas a la función principal en él, y eso es todo. Pero simplemente funciona.

Entonces, de la misma manera, lo que es, donde lo hemos implementado. Entonces, si vamos, solo para mostrarte algo sobre esto, y solo para mostrarte cómo funciona esto. Entonces, recuerdas que mostramos cómo funcionaba el WebSocket, cómo funcionaba la suscripción a GraphQL. De hecho, puedes ver que estamos llamando a estos ganchos addEntity exactamente eso. Entonces, aquí, cada vez que hay un guardado, ¿de acuerdo? Estamos interceptando este guardado, y obtenemos la función original y los datos que se querían guardar. Y estamos haciendo algunas cosas. Llamamos a la función original, y luego hacemos algo más. ¿De acuerdo? ¿De acuerdo? Y se hace de la misma manera que el módulo dbAuthorization. Entonces, en el módulo dbAuthorization, es la forma en que se configuran las autorizaciones se hacen en realidad con, es un módulo largo, pero tiene estos ganchos addEntity. Entonces, ese mecanismo es un mecanismo también que alimenta la autenticación y autorización. Entonces. Perfecto. Entonces puedo implementar mi código que interceptará la solicitud antes de que se ejecute, puedo hacer lo que quiera. Y sí. Sí, puedes hacer cosas en dos niveles diferentes. Uno es antes de que se guarde la entidad, y el otro es antes de que se reciba la entidad, uno antes de que se guarde la entidad, y el otro antes, y la otra forma es cuando se recibe la solicitud. ¿De acuerdo? Esas son dos formas diferentes de hacer lo mismo. Entonces no es lo mismo, son cosas diferentes. ¿De acuerdo? Entonces, pero normalmente probablemente quieras hacerlo usando las entidades, pero también podrías ejecutarlo para todas las solicitudes. Por ejemplo, si lo ejecutamos aquí. En mi complemento, lo que podría poner es, puedo poner un gancho de Fastify. Entonces aquí podemos ejecutarlo, algo para una solicitud. Entonces, adhoc en la solicitud. ¿De acuerdo? Y la información del registro de la solicitud. Y puedes poner lo que quieras aquí. Y aquí tenemos esto, y como puedes ver, hemos ejecutado, hemos impreso las cosas. Genial, genial. Entonces podrías, sabes que algo que es realmente genial, esto también funcionaría, por ejemplo, para otras rutas. Entonces rutas que no generas tú mismo. Entonces, y aquí verás que hemos obtenido en la solicitud para cada una de ellas. ¿De acuerdo? ¿Tiene sentido? Sí, genial. Eso es exactamente lo que estaba buscando. ¿De acuerdo? ¿Y hay algo más? Estoy bien, alguien dijo. Genial, de acuerdo. ¿Estás bien? Genial. ¿Pero puedes implementar? ¡Yay, ¿funcionó? De acuerdo, algo. Alguna característica interesante que puedes ver en tu final. Aquí obtienes el número de solicitudes, la latencia, la cola de servicios y el número de solicitudes, la latencia, el número de clientes, etc. Bastante genial. También puedes ver si abres los detalles de tu aplicación, que puedes obtener los registros, por ejemplo. Y sí, necesitamos hacerlos más legibles.

Espacios de trabajo dinámicos y beneficios de SQLite

Short description:

Esta parte introduce el concepto de Espacios de trabajo dinámicos y discute los beneficios de usar SQLite. También menciona la posibilidad de configurar CORS para mostrar gráficos en OpenAPI. El orador expresa entusiasmo por la latencia y destaca las próximas demostraciones.

Pero sí, de todos modos, esto es realmente genial. Como puedes ver aquí, tenemos todos nuestros registros para nuestras cosas. Es realmente genial. Y ahora ves que se queja de que necesitamos configurar CORS para mostrar gráficos en OpenAPI. Puedes acceder a ellos desde aquí, pero necesitas permitir CORS para hacer eso. Algo que es realmente interesante es el concepto de Espacios de trabajo dinámicos. Entonces, si creas un repositorio de GitHub, puedes crear las acciones de GitHub para que obtengas PR en vivo data automáticamente. Ten en cuenta que la latencia para estas cosas es realmente genial. No sé si te gusta esta latencia, pero a mí sí. Personalmente, me gusta esta latencia, pero es mi opinión. Parte de esto también es el beneficio de SQLite. Para ser claro. Hay algunas cosas que se pueden hacer relacionadas con eso. Quiero mostrarte algunas otras cosas que podrían ser muy interesantes de hacer. De acuerdo, si estás haciendo este tipo de cosas, ¿de acuerdo? Lo siento, espera un segundo.

Configuración de cuota de Platformatic Cloud y Monorepo

Short description:

La cuota gratuita de Platformatic Cloud te permite crear hasta cinco aplicaciones. La actualización a un plan de pago proporciona más flexibilidad y elimina el inicio y reinicio automáticos. La latencia de inicio en frío para los planes gratuitos es agresiva, pero los planes de pago ofrecen un rendimiento más rápido. Platformatic no cobra por asiento de usuario, lo que lo convierte en una opción rentable para equipos pequeños. Se combina bien con Vercel y se puede utilizar en una configuración de monorepo. Las APIs en un monorepo pueden comunicarse entre sí utilizando Platformatic Runtime. La Demostración del Cliente Runtime muestra esta funcionalidad.

Antes de hacer eso, ¿hay alguna otra pregunta sobre esto? Tom, Georgelov? ¿Estás bien? Todo bien. ¿Qué piensas? ¿Qué pienso en general? Sí. Es algo sofisticado. No sé, pero intentaremos usarlo en producción algún día. Genial.

Ok, algo que es aún más sofisticado, si llamas sofisticado a lo que te voy a mostrar a continuación, será aún más sofisticado, ¿de acuerdo? Ok, en realidad voy a... Espera, pregunta. ¿Cuánta cuota gratuita tengo para esta plataforma Platformatic Cloud? ¿Perdón? ¿Cuánta cuota gratuita tengo en Platformatic Cloud? Entonces, si tienes... puedes crear, creo, cinco aplicaciones de forma predeterminada, solo un límite aleatorio. Y en realidad mi cuenta ya tiene un plan Pro, la configuración del plan, pero si quieres solo una aplicación, tienes... entonces, de forma predeterminada, tus espacios de trabajo básicos, tus aplicaciones básicas y lo siento, tus espacios de trabajo básicos tienen estos puntos de entrada de nombre aleatorio, ¿de acuerdo? Si quieres configurar el CNAME, ¿de acuerdo? Si quieres configurar un CNAME, tendrás que actualizar a un plan de pago y también significaría que la aplicación no se detendrá automáticamente. Como ahora mismo, cuando estás usando Platformatic, cualquier cosa de la cuota gratuita, todo se escala a cero muy rápidamente. Así que la mayoría de las veces, ni siquiera te das cuenta, esto se detuvo y se reinició mientras actualizaba esto, ¿de acuerdo? Así que normalmente ni siquiera lo notas, pero puede haber una pequeña demora de vez en cuando si hay... No, no 15 minutos como Amazon Dambda. No. Es menos. Dices que es realmente agresiva, sí. Es una demora de inicio en frío realmente agresiva para los planes gratuitos, pero por otro lado, si solo necesitas una aplicación, son $4.99. Así que es barato. Ok, ok. Así que sí, ¿ves eso? Ves, esto subió a $450 porque se detuvo y se reinició. Solo para darte una idea de cuánto cuesta detener y reiniciar. Mi latencia es mucho más alta, es mucho más alta. Son 2,000 milisegundos. Sí. Lo entiendo, ¿por qué? Sí, más o menos. Nuevamente, es agresivo al detener y reiniciar, pero si adoptas alguno de los planes de pago, en realidad es muy, muy rápido, pero también es barato. Una de las cosas que hace en comparación con otros sistemas es que no cobramos por asiento de usuario, por lo que no se vuelve más caro a medida que más personas implementan cosas. Ok, genial. Si tienes tres personas y solo necesitas un entorno, sí, entonces $4.99. Así que es, como dije, muy amigable para los desarrolladores y tiene un precio para equipos pequeños. Así que, sí. ¿Es genial? Muy genial. Parece Vercel para el backend. Sí, más o menos. Sí, esa es la idea. Sí, en realidad se combina muy bien con Vercel. Entonces, si vas a nuestro blog, tenemos un tutorial completo sobre cómo implementar una aplicación de pila completa usando Vercel, Platformatic y una herramienta llamada Neon. Así que puedes ensamblarlo todo junto, y también Auth0, como un sistema tentacular, pero es más o menos lo que la gente construiría en estos días. Y si estamos en un monorepo, siempre y cuando conectemos nuestras acciones de GitHub para implementar cada una como una aplicación individual, para que todas tengan su propia instancia, ¿pueden hablar entre sí? No, estas son dos cosas diferentes, ¿de acuerdo? La primera es... Lo siento, ¿dónde está? Lo cerré. Ok, estos son dos temas diferentes, ¿de acuerdo? Uno es que tengo... Lo siento, ¿qué quieres decir? ¿Tienes un monorepo con muchas cosas dentro? Sí, tenemos muchas APIs como microservicios. También tenemos nuestro GraphQL BFS que ponemos al frente de esos, que usamos como una puerta de enlace. Así que supongo que realmente no necesitaríamos que las APIs se comuniquen entre sí porque ellas se comunican con Kafka o algo así en el backend. Sí, gracias, Okmar. Y sí, eso es exactamente lo que tengo y una demostración ligeramente diferente a esta, y eso es lo que voy a mostrar. Así que digamos que... Para cubrir ese caso de uso, vamos a usar otra biblioteca de código abierto que hemos desarrollado llamada Platformatic Runtime. Y con Platformatic Runtime, podemos llamarlo Demostración del Cliente Runtime. En realidad, puedo mostrarte esto. Este repositorio, Wings make you fly, lo que sea, tiene dos servicios, que es esencialmente el equivalente de tu monorepo. Tienes uno que es... Uno es como BFF.

Platformatic Runtime y Composición de Servicios

Short description:

El Krook y ManFalk es el punto de entrada principal, mientras que rMining es el servicio principal. El Krook ManFalk es un punto de enlace raíz que llama al servicio principal. Puedes iniciar la aplicación utilizando el comando 'platformatic runtime start'. La aplicación se ejecuta como un único punto de enlace, con los servicios especificados en las definiciones. Los servicios se conectan automáticamente y puedes desarrollarlos de forma independiente. Cuando los ensamblas juntos, se pueden implementar como una unidad única. Este enfoque monolítico elimina la necesidad de conexiones fijas y permite una implementación fácil. El runtime también admite una configuración ligeramente diferente con un compositor OpenAPI automático y otros servicios como el nobleman lánguido y el carro sombrío.

Uno es como BFF. El Krook ManFalk es como el punto de entrada principal. Y rMining es el servicio principal. De acuerdo. Y rMining tiene una ruta raíz que llama a esta cosa, que devuelve solo una propiedad de ejemplo. De acuerdo. Y el Krook ManFalk es... Como un punto de enlace raíz que lo llama utilizando un cliente.

Ahora, ¿cómo iniciamos esto? Entonces hacemos 'platformatic runtime start'. Oh. Espera. ¿Qué instalé aquí? Sí, versión antigua. Hice estas demostraciones con la instalación principal de Platformatic. Vamos a instalarlo de nuevo. Y tú, ¿estás haciendo algo como Federación de GraphQL, Tom? No, no lo estamos haciendo. Aún no estamos federando. En este momento, solo estamos utilizando GraphQL como una especie de puerta de enlace para todas las APIs. ¿Estás utilizando REST para esas APIs? Sí. Sí. APIs de Fastify, y luego Mercurius. Sí. De acuerdo. Genial. De acuerdo. Esto está instalando cosas, apostando.

De acuerdo, entonces aquí hacemos 'NPX platformatic runtime start'. Ahora ves que se inició, vemos el registro del Krook y ManFalk que está disponible en el puerto 3.0.0.1. Y esto devuelve JS Nation. Pero este es el Krook ManFalk, pero si miramos esto, ves que el servicio outmining recibió una solicitud, una solicitud entrante, y solicitó una solicitud que se completó, y luego el Krook ManFalk devuelve las cosas. Ten en cuenta que todo esto se hace como una única definición, así que esto es solo un único punto de enlace. Solo especificas los servicios que deseas cargar, y eso es todo. La carpeta y esto se conectan automáticamente, y necesitas la carpeta y establecer el punto de entrada, que es el servicio que se va a exponer como tu BFF, y todo esto se maneja automáticamente. Y eso sería solo una aplicación en Platformatic, ¿verdad? ¿Verdad? Esto es solo una aplicación. Puedes ejecutar esto y hacer una implementación grande y única. Esto es un monolito, básicamente, y no hay conexiones fijas, nada de eso. Puedes desarrollar estos de forma independiente. Cada uno de ellos se puede iniciar con sus propias variables de entorno si quieres. No hay problema. Pero cuando los ensamblas juntos, puedes implementarlos como una unidad de implementación única. Sí, eso sería genial, porque si está generando las URL dinámicas y todo eso, una URL dinámica es ideal en lugar de tratar de realizar un seguimiento y tener que orquestar todo el Ah, mira, no me lo digas. Tuve tantos problemas con estas cosas. Ten en cuenta que conceptos similares se pueden implementar como parte de tomar dos dos mientras hago estas demostraciones. Entonces, en el runtime, aquí, esta es una configuración ligeramente diferente. En esta configuración, tenemos tres cosas. Tenemos un compositor OpenAPI automático y otras dos cosas, el nobleman lánguido y el carro sombrío. Ten en cuenta que el compositor no es nada. No es nada. Solo dice que quieres componer el nobleman lánguido y el carro sombrío. El nobleman lánguido exporta una ruta de saludo y el carro sombrío exporta una aplicación de base de datos Platformatic similar a la que

Platformatic Composer y Autorización

Short description:

Aquí, puedes descubrir automáticamente todo y crear una capa frontal automáticamente. Es rápido y compatible con Platformatic Cloud. Migrar APIs existentes no debería ser demasiado difícil. Seguimos encontrando errores, pero la plataforma es estable. Hay mucho trabajo de autorización, pero lleva tiempo configurarlo. Configuraré algo simple para demostraciones rápidas en el futuro.

acabamos de mostrar antes con nuestra cosa de películas. Aquí, probablemente tengas los mismos problemas antes, así que necesitamos reinstalar la cosa. Lo siento. Y Sí. C LT runtime start. Y. Sí, esto es. Hay un poco de extracción. Y ahora puedes esto es el compositor como todo. Actualizar. Entonces, ¿cuál es la diferencia principal en el tiempo de ejecución que mostraste antes y luego componer? Oh, esto hace la composición entre las cosas automáticamente. Así que no necesitas crear tu BFF, esto es tu BFF creado automáticamente. OK, así que descubre automáticamente todo y crea esa capa frontal también. Sí. En su mayoría. Y graph QL o solo rest por ahora, rest. OK. Graph QL. Está por venir. Increíble. Eso necesita un poco más de trabajo. Entonces, sí, esto es realmente genial porque permite. Es realmente muy rápido, así que puedes hacer tus cosas muy fácilmente y verificar las cosas, como puedes verificar esto y. Esto es responsable en poco tiempo, como puedes ver, es. Realmente, realmente rápido desde. Esto es lo mismo que antes. Y todo esto es compatible con Platformatic Cloud, por lo que puedes implementar tus servicios nano individuales encima de la cosa que haces. Por lo tanto, migrar APIs existentes y todo eso no debería ser demasiado difícil. Si lo es, abre un error. Esa es la idea, la idea. En teoría, no, pero en la práctica, ya veremos. OK, y estoy bromeando un poco. Portamos algunas de nuestras cosas internas a todo el sistema y fue bastante sencillo pero. Realmente depende, seguimos encontrando errores, así que esa es la. Naturaleza de la Bestia, naturaleza de la Bestia. Entonces, la plataforma salvaje, diría que es bastante estable. Todo lo que ves dentro de Performance cloud se construye sobre Platformatic IBM, servicio de Platformatic. Y en realidad es muy, muy estable. Yo diría. Las cosas nuevas acaban de ser anunciadas. Entonces, como de costumbre, espera algunos problemas fáciles de encontrar. En este tipo de cosas. No sé. Creo que he cubierto todo lo que quería cubrir en la masterclass. Hay mucho trabajo de autorización, pero lleva bastante tiempo configurarlo. En el futuro, probablemente configuraré algo muy simple para poder demostrarlo muy, muy rápidamente. Pero ahora mismo necesito hacer un poco más de trabajo.

¿Puedo hacer una pregunta más? Por supuesto, Tom, tantas como quieras. Sabes, cuando estábamos hablando de suscripciones antes con Redis y algo más que ya se admitía.

Agregando Integración con Kafka y MQ-Emitter

Short description:

Si queremos agregar Kafka, ya está hecho y es muy simple de configurar. Tenemos nuestro propio MQ-Emitter para Kafka, que estamos usando con Mercurius. Estamos dispuestos a hacerlo de código abierto. Solo abre un problema y podemos resolverlo. Soy un gran fan de Kafka y funcionará perfectamente con este sistema. Hablemos de nuevo pronto, amigos.

Memoria. Si queremos agregar Kafka, ¿será algo similar a lo que hicimos para Mercurius donde tuvimos que escribir nuestro propio conector de publicación-suscripción con Kafka y luego pudimos vincular eso. Oh, ¿ya lo tienes hecho? ¿Está usando lo mismo? Entonces, probablemente... Eso tendrá que ser investigado, cómo hacerlo. Ahora mismo probablemente esté un poco integrado en algunas cosas, pero si abres un problema, probablemente podamos resolverlo.

No creo que tenga una API disponible para hacerlo. ¡Adiós, Jaroslav! No tengo una API disponible para eso en este momento. Pero, para ser honesto, es muy simple de configurar. Si ves aquí, básicamente esto es lo que estamos haciendo, lo cual es muy estúpido. Y si quisiéramos hacer algunas cosas con Kafka, probablemente necesitaría darte una forma de ejecutar esto. Para configurar esto y actualizar estas cosas. Pero no es un trabajo difícil. Solo es cuestión de configurarlo correctamente y permitir que se haga. Entonces, en general, sí, ya está hecho.

Entonces, ¿ya tienes un MQ-Emitter para Kafka, verdad? Construido. Sí. ¿De verdad? ¡Wow! Sí, lo estamos usando con Mercurius en este momento. ¡Wow! Entonces, y no está escrito aquí, así que envíame un PR para que pueda incluirlo en el repositorio. De acuerdo, sí, compartiremos lo que tenemos contigo. Entonces, es MQ-Emitter Kafka, este. No, escribimos el nuestro. Tuvimos algunos problemas con este, así que escribimos el nuestro. Oh, entonces, es privado. Sí, es privado en este momento, pero definitivamente estamos dispuestos a hacerlo de código abierto. Sí, sí, bueno, mira, soy un gran fan de Kafka. He construido sistemas que han procesado millones a través de esa cosa. Entonces, lo que has leído, lo que has escrito, simplemente funcionará, básicamente, en este sistema. Solo tomas eso, solo necesito encontrar una forma de conectarlo al sistema y eso será todo. Genial, de cualquier manera en que podamos contribuir, siempre estoy dispuesto a ayudar. Sí, si abres un problema al respecto, estaré muy feliz de echar un vistazo y ver, y puedo traer tu propio tipo de emisor MQ, que probablemente sea mejor. Sí, eso sería genial. Sí, genial, eso es todo. Esto fue genial, Matteo, muchas gracias. Gracias, amigos, y no sé, ¿hay, Tio, Gabriel, Hada, Paul, alguna pregunta que tengan? No, estoy bien, gracias. Genial, no hay preguntas. De acuerdo, perfecto, amigos. Increíble. ¿Cuántos de ustedes estuvieron en la conferencia presencial? Sí, sí, los vi. Hadathio, allí, allí conmigo. Oh, okay, todos ustedes. ¡Genial, amigos! Increíble. Yay, no te preocupes, Paul. De acuerdo, toma el micrófono. Sabes, no necesitas este micrófono. Esto es bastante caro, pero tal vez quieras conseguir un micrófono diferente. De todos modos, esto fue genial y hablemos de nuevo pronto, amigos. Diría adiós y te devolveré, no sé, media hora de algo, lo cual siempre es un buen uso del tiempo. Adiós. Gracias, Matteo. Adiós. Gracias. Adiós.

Watch more workshops on 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
Node Congress 2023Node Congress 2023
109 min
Node.js Masterclass
Top Content
Workshop
Have you ever struggled with designing and structuring your Node.js applications? Building applications that are well organised, testable and extendable is not always easy. It can often turn out to be a lot more complicated than you expect it to be. In this live event Matteo will show you how he builds Node.js applications from scratch. You’ll learn how he approaches application design, and the philosophies that he applies to create modular, maintainable and effective applications.

Level: intermediate

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.
Node Congress 2022Node Congress 2022
26 min
It's a Jungle Out There: What's Really Going on Inside Your Node_Modules Folder
Top Content
Do you know what’s really going on in your node_modules folder? Software supply chain attacks have exploded over the past 12 months and they’re only accelerating in 2022 and beyond. We’ll dive into examples of recent supply chain attacks and what concrete steps you can take to protect your team from this emerging threat.
You can check the slides for Feross' talk here.
Node Congress 2022Node Congress 2022
34 min
Out of the Box Node.js Diagnostics
In the early years of Node.js, diagnostics and debugging were considerable pain points. Modern versions of Node have improved considerably in these areas. Features like async stack traces, heap snapshots, and CPU profiling no longer require third party modules or modifications to application source code. This talk explores the various diagnostic features that have recently been built into Node.
You can check the slides for Colin's talk here. 
JSNation 2023JSNation 2023
22 min
ESM Loaders: Enhancing Module Loading in Node.js
Native ESM support for Node.js was a chance for the Node.js project to release official support for enhancing the module loading experience, to enable use cases such as on the fly transpilation, module stubbing, support for loading modules from HTTP, and monitoring.
While CommonJS has support for all this, it was never officially supported and was done by hacking into the Node.js runtime code. ESM has fixed all this. We will look at the architecture of ESM loading in Node.js, and discuss the loader API that supports enhancing it. We will also look into advanced features such as loader chaining and off thread execution.