1. Introducción a Fastify
Encantado de estar aquí en el Congreso de Node. Hablando de Fastify, una poderosa herramienta para construir aplicaciones web y APIs en Node.js. Tiene un registrador incorporado llamado Pino. Fastify es ampliamente utilizado con millones de descargas por mes. El problema con el uso de un sistema de controlador de vista de modelo es que no escala bien en complejidad. En lugar de construir una capa de vista, nos enfocamos en construir APIs. Esto puede llevar a un gran número de modelos y un archivo routes.js extenso.
Entonces, encantado de estar aquí en el Congreso de Node. He estado... Mira, he sabido de esta conferencia durante un tiempo, y es genial finalmente estar aquí en Berlín. Ha pasado mucho tiempo desde que vine a Berlín, y me ha hecho falta. Entonces, mira, estoy aquí hablando de Fastify. Entonces, es genial estar aquí, y así sucesivamente.
Entonces, un par de cosas sobre mí. También tengo un boletín de noticias, y en el Reino Unido, si no importa, solo suscríbete allí, o sígueme en Twitter, en Matteo Collina. Y también estoy transmitiendo en Twitch, así que si te gusta eso, puedes unirte. Además, necesito corregir a Liz, porque desde que puse en la biografía, en realidad son 17 mil millones en 2022. Lo que sea. Como, es muy divertido.
Entonces, está bien. Entonces, hoy, estamos hablando de Fastify. Y si no conoces Fastify, probablemente deberías, pero probablemente deberías usarlo si estás usando Node.js, ¿verdad? Esto no es el Congreso, así que no lo sé. Probablemente deberías usar Fastify para construir tus aplicaciones web y backends y APIs. ¿Cómo lo usas? Muy fácil, requieres importar lo que sea. Tiene un registrador incorporado. EpiDays, quieres un registrador en tu aplicación, ¿verdad? Se llama Pino. Y puedes usarlo para crear tus rutas usando AsyncAwait y todas las otras travesuras que podrías querer. Probablemente son 4 mil millones de veces por año o algo así, descargas por mes.
Entonces, está bien. Hablemos un poco sobre por qué no deberías usar Fastify o cualquier cosa, o cómo no usar Node.js. ¿Cuántos de ustedes han construido un sistema de controlador de vista de modelo en su carrera? Genial. ¿Cuál es el problema con este sistema es que finalmente no escala? ¿En qué sentido no escala? Bueno, no escala bien en complejidad. Si estás construyendo una aplicación, y la estás construyendo siguiendo los controladores de vista de modelo, está bien, comencemos con la vista. La mayoría de las veces ya no hay una capa de vista, solo construimos API, así que eso se ha ido. Entonces, si estás escribiendo un pedazo de código, o va al controlador o a los modelos, y si, ya sabes, hay un 50% de posibilidades. Después de un tiempo tienes 2000 modelos y un archivo routes.js que tiene 10,000 líneas de largo.
2. Construyendo Monolitos con Fastify
Verdad. MVC lleva a Carbonara y código spaghetti. En su lugar, estructura tu aplicación por dominios y características. Evita mezclar las bases de datos de las características. Fastify ofrece encapsulación a través de plugins, permitiendo la segmentación de código y datos. No tiene costo ni sobrecarga y soporta decoradores. La encapsulación permite contextos anidados sin compartir datos entre capas.
Verdad. Este es un número real de code. Así que realmente no funciona bien de esa manera, y no scale bien en complejidad. ¿Qué haces en su lugar? Porque la pregunta es, si el controlador de vista de modelo no es suficiente, ¿qué haces en su lugar? Y cómo algunas pocas compañías importantes y algunos sistemas importantes pueden construir monolitos, porque el controlador de vista de modelo no es bueno pero aún así envían monolitos. Así que hay algunos artículos de vez en cuando sobre monolitos, y por qué y cómo, qué están haciendo.
Bueno, para ser honesto, MVC lleva a Carbonara y code spaghetti, pero me gusta la Carbonara y no el code spaghetti. Eso es todo. Entonces, ¿cómo lo haces? Necesitas estructurar tu aplicación por dominios, por características. Necesitas identificar cuáles son las características clave de tu aplicación y segmentarla. Y entre esos sistemas, tiendes a comunicarte a través de APIs bien conocidas. La parte importante es, no tener un conjunto de características, leer la database del otro conjunto de características. Porque en el momento en que empiezas a sumergirte en ambos, entonces tienes mucho, no sabes cómo terminas con tus relaciones. Otra forma de decirlo es que si para obtener un data, necesitas hacer un 10, necesitas unir 10 tablas, probablemente tienes el esquema equivocado. ¿De acuerdo? Así que piensa en eso y en lo que estás haciendo y reflexiona sobre tus elecciones de vida.
Entonces, ¿qué hace un dominio y cómo construimos un monolito? Como es algo que queremos hacer, ¿verdad? Es algo bueno. Y bueno, sabes, normalmente, es un tema específico que se está desarrollando, ¿de acuerdo? Los casos típicos son el catálogo o el sistema de gestión de pedidos o un carrito o como quieras llamarlo, ¿de acuerdo? En algunas de las cosas que han estado desarrollando recientemente, se llama, tenemos un dominio que es la organización y los equipos y otras cosas son sobre las aplicaciones y el code que ejecutas en nuestra cloud. De todos modos, son dominios, y quieres evitar el code spaghetti. Entonces, ¿qué ofrece Fastify para ayudar a construir con esto? Fastify ofrece un concepto llamado encapsulación. Así que te permite estructurar tu aplicación en un conjunto de plugins que puedes usar para segmentar tus data, para segmentar tu code y de esa manera no comparten nada, esencialmente. Ahora algunos pueden preguntar pero podrías hacer esto antes, ¿verdad? Hay otras técnicas. Sí, pero esto no tiene costo, no tiene sobrecarga alguna. ¿De acuerdo? Es súper rápido, así que no tienes nada que pagar por ello. Y es genial. También tiene un concepto de esto llamado decorador. Así que puedes agregar cosas a tu code y aplicación. Entonces, ¿cómo funciona la encapsulación? Básicamente puedes crear contexto dentro de contexto dentro de contexto dentro de este contexto, como una especie de gran matrioshka, y cada capa no comparte nada con la anterior. Es genial. Algo desapareció. Bueno, divertido. Algo falta.
3. Encapsulación y Estructuración con Fastify
Podemos usar la llamada register para crear contextos de encapsulación, decorar objetos de solicitud o respuesta con data e información, y utilizar hooks. El plugin de Fastify permite romper la encapsulación y estructurar la aplicación como sub-aplicaciones con sus propios dominios y sub-dominios. Cada sub-aplicación puede tener sus propios plugins, rutas y estructura de código. Los plugins también pueden ser utilizados para metaprogramación y personalización del comportamiento del sistema. En las aplicaciones de JavaScript, los plugins y las rutas se utilizan para la estructuración.
No lo sé. Vale, divertido. Había un ejemplo allí. No lo sé. Vale, llegó. No tengo ni idea. No he hecho nada. Genial. Lo que pasó es que... Lo que puedes ver aquí, podemos usar esta llamada register para crear estos contextos de encapsulación, y podemos decorar nuestros objetos de solicitud o respuesta con data e información, y tenemos un concepto de hooks.
Aquí tenemos hooks, y tenemos el hook onRequest donde establecemos el data, y esto llevará... Dadas las dos rutas, tendrás un valor diferente. Ves eso uno y dos. Y esos tendrán los mismos valores diferentes que se han poblado en base al concepto... Basado en los metadatos, en los que se está ejecutando la ruta. Es genial, porque de esta manera, podríamos crear nuestras cosas mejor. Entonces, ¿cómo lo haces... Pero ya sabes, en todo sistema de encapsulación, hay una forma de romper la encapsulación. Entonces, ¿cómo rompes la encapsulación? Bueno, hay una utilidad llamada plugin de Fastify que te permite hacer eso.
El concepto clave es que quieres proporcionar, crear, estructurar tu aplicación como pequeños bits de sub-aplicaciones. De modo que cada una de ellas contenga su propio dominio y su propio sub-dominio. Y de esa manera, puedes scale tu desarrollo de JavaScript a diferentes partes. Y cada una de ellas tiene sus propios plugins, sus propias rutas, y toda la estructura de su code. ¿Cómo rompes el término de encapsulación? Usas estos bonitos, puedes usar un skip override o el plugin de Fastify de nuevo. Nos faltan algunas diapositivas, así que estoy, vale, llegó. Además, puedes usar plugins para hacer metaprogramación. Cuando registras un plugin o una ruta, podrías empezar automáticamente a crear un nuevo comportamiento. Personalizar automáticamente la forma en que funciona el sistema. Vamos a saltar, estoy un poco tarde. ¿Cómo estructuras tu aplicación normal de JavaScript? Usas plugins y rutas para estructurar tu cosa.
4. Construyendo un Monolito Modular
Para construir un monolito modular, necesitas identificar el dominio, estructurar tus carpetas de código y utilizar plugins y decoradores para compartir código entre dominios.
Estas son estructuras típicas para un monolito, ¿verdad? Esto no es modular en absoluto, es solo un monolito. Bueno, está bien. Esta no es la diapositiva que se suponía que debía mostrar. Bueno, ahora es verde. Entonces, ¿cómo construimos un monolito modular? En primer lugar, es uno, y ha llegado. Necesitas identificar el dominio que quieres trabajar, y luego dos... Bueno, necesitas estructurar tus carpetas de código para que puedas organizar tus dominios uno a la vez. Y tres, es lo mismo. Va a ser divertido cuando haga la codificación en vivo. Me has gafado, Paolo. Esto es totalmente por ti. Entonces tres, puedes usar plugins y decoradores para compartir code entre dominios.
5. Demostración de Fastify
Vamos a hacer una rápida demostración de una aplicación típica de Fastify. Tenemos una carpeta con server.js que inicia la aplicación y la configura. En la aplicación, cargamos Fastify y utilizamos Fastify autoload para cargar automáticamente plugins y rutas. Tenemos plugins para la gestión de errores y el manejo de no encontrados. También tenemos un objeto de inventario para almacenar datos y dos rutas para productos e inventario. Vamos a ejecutar la demostración y ver los resultados.
Y vamos a hacer una rápida demostración ahora porque de hecho, es hora de la demostración. Y esto se suponía que iba a ser una bonita imagen de Roma, y los dioses de la demostración deberían estar conmigo. Pero, aparentemente, está bien, esto está empezando súper bien. Así que veamos cómo va.
Bueno, aquí vamos. Así que tenemos esta bonita carpeta. Y en esta bonita carpeta tenemos algunas cosas. Así que estas son aplicaciones típicas de Fastify. Tengo mi server.js que inicia las cosas, y configuramos mi, tenemos un método de construcción para construir la aplicación. Y luego puedo cerrar mi, escuchar algo en el puerto y el host. Y luego cerrar la aplicación, genial. Y en mi aplicación, ¿qué hago? Bueno, en mi aplicación cargo Fastify. Utilizo una utilidad llamada Fastify autoload para cargar automáticamente todos mis plugins, o mis rutas. Y luego devuelvo la aplicación.
¿Cuáles son mis plugins? Bueno, tengo algunos plugins diferentes. Tengo uno para gestionar el error, y uno para hacer el manejo de un no encontrado. Y mira, quieres un no encontrado y una gestión de errores, ¿verdad? Así que, vale, y tenemos algo llamado inventario. ¿Qué es un inventario? Bueno, el inventario es una especie de objeto que utilizo para almacenar data, ¿vale? En algún momento, necesitas una entidad, alguien que quieras obtener algo de data de la database, ¿vale? Y puedes usar lo que quieras. Puedes usar Prisma. Puedes usar Next. Puedes usar solo el controlador de la database. Pero en algún momento, necesitarás tener alguna utilidad que lea data de la database para ti. Así que de eso se trata esto. Y lo falsificó completamente, ¿vale? Simplemente devolvió verdadero si esta SQ es para tejido, ¿vale?
¿Cuáles son nuestras rutas? Tenemos dos rutas. Una es el producto. Así que queremos una ruta para productos, y eso devuelve. Y luego también consultamos para obtener nuestro inventario, ¿vale? Y también, tenemos un inventario que acaba de devolver el número de artículos que están en la tienda para ese SQ. ¿Por qué estamos haciendo esta estructura de API, quién sabe, ¿vale? Pero ese no es el punto. Así que, vale, tenemos esta estructura. Vamos a ejecutar esto y veamos cómo va.
6. Modularización de Rutas y Carga
Podemos consultar el catálogo de productos y el inventario. Fastify autoload proporciona una estructura de enrutamiento basada en el sistema de archivos. Podemos refactorizar nuestra carpeta de rutas para convertirla en módulos y crear subcarpetas para rutas dentro de cada módulo. El punto de interacción clave entre el catálogo y el inventario es el archivo inventory.js, que pertenece al subsistema de inventario. Creamos un archivo index.js y cargamos nuestras rutas utilizando la utilidad autoload.
Entonces hacemos Node server, y luego podríamos hacer... hagamos eso, ¿vale? Podemos hacer curl. Y podemos ir y consultar el catálogo de los productos, ¿vale? Y puedes ver el resultado. Y luego puedes ir al inventario, y producto 42, y obtienes los data. Y luego si es 43, no obtienes nada, ¿vale? Nota que ves que hay un prefijo, y el prefijo es la carpeta. Entonces Fastify autoload realmente te da esa agradable estructura de enrutamiento basada en el sistema de archivos de Fastify para estructurar tu cosa.
Entonces, esta estructura es bastante buena, ¿vale? Esto es un buen monolito, esencialmente, lo que llamarías arquitectura MVC, muy cercana. Pero es algo que puede llevarte muy lejos. ¿Cómo migramos esto para ser un monolito modular? ¿Y cómo podemos tener varios equipos comunicándose entre sí, y compartiendo code de una mejor manera? Vale, comencemos haciendo un poco de refactorización a esto.
Entonces, primero que nada, tomemos nuestra mágica carpeta de rutas, y llamémosla modules, porque nos gusta, ¿verdad? Así que no es ruta, son modules. Entonces, y ahora nos estamos convirtiendo en una arquitectura modular, ¿verdad? Así es como lo haces, ¿vale? Entonces, y todavía tienes tu catálogo y tu inventario, pero ahora creamos subcarpetas para rutas, y mueves las cosas allí. Vale, y luego inventario. Y mueves las otras rutas. Genial, tenemos, tal vez he hecho mi movimiento en estas cosas, ¿y por qué hacemos esto? Bueno, quedará claro en un segundo. Así que hemos hecho esto, estas dos migraciones, ¿vale? ¿Cómo los separamos? Entonces, el punto de interacción clave entre el catálogo y el inventario es este archivo inventory.js, que es un plugin. Entonces necesitamos hacer algo al respecto porque esto realmente, pertenece al subsistema de inventario. Entonces, lo que hacemos es abrirlo y creamos, aquí creamos un archivo index.js. Y en este archivo, literalmente, estoy haciendo trampa mal. Solo estoy poniendo cosas aquí, vale, copiando estas. Bueno, ya no necesitaremos esto. Te mostraré en un segundo por qué. Así que tenemos esto y genial. Ahora necesitamos algunas cosas más. Entonces queremos cargar nuestras rutas. Entonces vamos y copiamos estas dos cosas. Obtenemos el autoload y esta utilidad llamada DSM que escribí. No preguntes por qué porque es una mala respuesta. Así que no quieres unir rutas. Entonces aquí tomas eso y oh solo copias esto. Vale, entonces aquí vas al inventario y después de hacer eso has configurado la cosa de autoload y para cargar nuestras rutas.
7. Refactorización y Mejoras con Platformattic
Hemos refactorizado todo y ahora podemos reiniciar esta aplicación. Se está bloqueando, pero lo arreglamos. Ahora podemos consultarla y ver que todavía funciona igual que antes. ¿Podemos hacer algo mejor? Sí, podemos. Hemos estado trabajando en una nueva empresa llamada Platformattic. Podemos crear un nuevo archivo de configuración Platformattic.service.json y abrir un servidor.
Bueno, entonces esto está hecho. Bueno, ahora lo que necesitamos hacer es esencialmente hacer lo mismo para nuestro catálogo. Y aquí vamos y no necesitamos el inventario. Bueno, usaremos el inventario de la capa superior. Genial, necesitamos una cosa más. Bueno, queremos establecer el prefijo. Entonces necesitamos las opciones y aquí necesitamos opciones y prefijo, ops prefijo. Genial. ¿Por qué lo haremos? Porque nuestra magia de autoload necesitará, configurará nuestro prefijo y solo necesitamos pasar eso. Entonces hacemos eso y tenemos, ¿qué es? ¡Bien! Entonces hemos creado, hemos configurado nuestras cosas. Ahora aquí podemos eliminar este archivo de inventario. Y aquí, oh, bueno no necesitamos, esto ya no son rutas. Son modules pero solo necesitamos cambiar algo. No queremos, queremos romper la encapsulación. Y solo queremos cargar cosas a un nivel. Entonces hemos refactorizado todo. Y ahora podemos reiniciar esta aplicación y se está bloqueando. ¡Bien! Y aquí vas y está arriba en lugar de fastify. ¡Genial! Bueno, y de nuevo es lo mismo en el otro archivo. Mira aquí, solo estoy cambiando esto fastify. ¡Genial! Entonces aquí vas y es... Vamos, sigo olvidando cosas. Bueno, aquí vas. ¡Genial! Entonces ahora podemos consultarla y puedes ver que esto todavía funciona igual que antes. Bueno, y los dioses de la demostración han estado mayormente conmigo. Así que estemos muy contentos con esto. Entonces hemos estado haciendo esta bonita refactorización y configurando cosas y parece bueno, ¿verdad? Sin embargo, ¿podemos hacer algo mejor? ¿Podemos mejorar nuestras cosas? Bueno, podemos. He estado trabajando durante un tiempo en una nueva empresa llamada Platformattic. Aquí viene el discurso, así que ten cuidado. Entonces, lo que podemos hacer aquí ahora es que podemos crear un nuevo archivo de configuración Platformattic.service.json y podríamos literalmente abrir un servidor.
8. Configurando Fastify y Lanzando la Nube
Veamos si Copilot está lo suficientemente contento. Agregamos la propiedad del servidor, los plugins y los módulos. Eliminamos archivos innecesarios. La aplicación se reinicia automáticamente. Se generan documentos OpenAPI. PlatformaticDB genera APIs a partir de una base de datos. Construir un monolito modular se trata de crear y separar preocupaciones. Puedes migrar fácilmente a microservicios. Lanzamos nuestra nube gratuita para desplegar aplicaciones Fastify o Node.js.
Veamos si Copilot está lo suficientemente contento. Entonces platformattic.dev, esquemas, bueno, sí, no exactamente lo que debería ser. Esquemas, y aquí tenemos V20 y aquí vamos. Y esto es DB, está bien, genial. Y ahora se está quejando porque nos falta algo, así que queremos agregar la propiedad del servidor, y queremos escuchar el puerto, y que vaya a 1000, queremos el nombre del host, y queremos... Está bien, genial, necesitamos agregar algunas cosas más, así que una cosa que queremos agregar son los plugins, y queremos decirle que cargue cosas desde alguna ruta, que es una ruta, y necesitamos cargar los plugins primero, así que simplemente hacemos cargar plugins, genial, y simplemente no queremos encapsular esto, y esto es falso, genial. Ahora lo siguiente es que queremos cargar nuestros modules, y queremos los modules, no queremos encapsular, y queremos ir solo un nivel de profundidad, con un nivel de profundidad, y ahora puedo eliminar este archivo muy felizmente, eliminar este otro archivo muy felizmente, así que hay muchos menos archivos para mantener, y ahora puedo simplemente hacer esto NPX-PLT service start, y ahora todo sigue funcionando como antes. Entonces, y ahora hemos simplificado muchas cosas. Un punto extra de este enfoque es que podría simplemente hacer, por ejemplo, servicio, agregar más configuración, y simplemente activar OpenAPI. Verdadero, está bien. ¿Qué error cometí? No está permitido... Oh, es DB. Servicio. Claro, tiene razón. Bueno, aquí simplemente se reinicia. Bueno, se reinició automáticamente. Cosas geniales. Así que se reinicia automáticamente como has visto. Así que lo que podríamos hacer ahora es ir aquí y mirar la pérdida 3000 documentation y verás todos nuestros documentos OpenAPI docs generados automáticamente y configurados correctamente. También admite métricas automáticas, integración automática de permisos y muchas otras cosas que quieres en tu aplicación de producción Node.js. Hay otro componente llamado PlatformaticDB que genera automáticamente tus APIs a partir de una database, pero no estoy hablando de esto en esta presentación. Lo que quería decir al final es que construir un monolito modular se trata de crear y separar preocupaciones y en algún momento podrías querer cambiar a microservices. Pero si has hecho eso, ves todo el code que he hecho es solo un archivo de configuración para empezar, así que podrías migrar fácilmente a microservices ahora y tienes casi una arquitectura de no compartir nada. Así que solo quería decir al final que también acabamos de lanzar nuestra cloud. Así que si quieres desplegar tu aplicación Fastify o Node.js está ahí y es gratis. Así que gracias. ¿Se toman las instantáneas de las startups después de la optimization de la función? No creo que esta pregunta fuera para mí. Sí, no creo que sí. Pero si quieres puedo intentar responder a esa pregunta.
Preguntas y Respuestas sobre Inyección de Dependencias y Depuración
Esta es una sección de preguntas y respuestas donde el orador responde preguntas sobre la inyección de dependencias y la depuración de microservicios Fastify. Explican que el mecanismo de inyección de dependencias mostrado es una forma sencilla de crear un contexto y adjuntar cosas a él. Es un sistema seco, del tipo no te repitas, que simplemente funciona. En cuanto a la depuración, el orador aconseja especificar esquemas tanto para los datos entrantes como para los salientes para garantizar la protección y una rápida representación de JSON.
Probablemente tengo la respuesta. No creo que esto sea para ti. Vale no. Espera. Parece que algo no está funcionando. Algo no está funcionando con las preguntas y respuestas. ¿Tienen alguna pregunta, amigos? Sí, simplemente levanta la mano y luego seguimos. A la antigua. Ooh. Sí, simplemente están... Vale, hay una pregunta allí.
¿Cuál es tu opinión sobre la inyección de dependencias basada en ShareCode? ShareCode, Fastify, ¿qué son? Sí, lo que acabo de mostrar es una forma muy simplista de inyección de dependencias. Esencialmente. La pregunta era, ¿qué piensas es lo que mostraste. Mecanismo de inyección de dependencias basado en compartir code a través del plugin Fastify. Si entiendo correctamente la pregunta, ¿verdad? Perfecto. Es exactamente eso. Es una forma muy cruda de crear un contexto y adjuntar cosas a ese contexto. Y para ser honesto, es un mecanismo de inyección de dependencias. Es principalmente un sistema muy seco, del tipo no te repitas. Y ni siquiera está basado en configuración. Simplemente creas tus plugins y puedes incluso especificar con Fastify autoload, incluso puedes especificar un poco qué otros valores necesitan ser decorados y todo se cargará correctamente. Entonces, sí, es un mecanismo de inyección de dependencias muy simple. Y desde mi punto de vista, es un mecanismo de inyección de dependencias que simplemente funciona, esencialmente.
Vale. Gracias. Tengo una pregunta aquí. ¡Oh, funcionó! ¡Choca esos cinco! Entonces, ¿cómo podemos debug que nuestro microservice Fastify está funcionando al máximo? Sí, esta es una pregunta fenomenal. Vale, lo primero que quieres hacer, quieres crear... Quieres asegurarte de que has especificado esquemas tanto para los data que entran como para los data que salen. De esa manera, estás protegido y también estás representando tu JSON lo más rápido posible.
Protegiendo Servicios y Reutilización de Código
Puede utilizar el módulo under-pressure para proteger su servicio de sobrecarga. Asegura que su servicio devuelva un agradable error 503 cuando está sobrecargado. El módulo es parte de Platformatic y viene con soporte de autocompletado. Platformatics soporta la compilación completa de TypeScript, por lo que puede escribir plugins en TypeScript. Al modularizar por dominio, puede colocar el código que no cae bajo una categoría de dominio particular en una biblioteca de utilidades que puede ser compartida entre módulos. Es importante mantener el dominio y la base de datos separados para mantener la integridad de los datos.
Es genial. Entonces, la segunda parte es que quieres usar un módulo. Se llama under-pressure, y under-pressure protege tu servicio de ser sobrecargado. Así que, probablemente has oído hablar del trashing del bucle de eventos, y te protege automáticamente de eso y esencialmente asegura que si tu servicio recibe demasiada carga, empieza a devolver un agradable 503 y, al menos, no se está bloqueando o entrando en una situación que es irrecuperable. Ah, por cierto, ese módulo también es parte de Platformatic, así que lo obtienes gratis, si usas nuestras cosas. Genial.
Y el archivo JSON era muy específico. ¿Cómo sabría qué poner allí si no soy Matteo? Oh, hay autocompletado si no lo notaste. En realidad es muy sencillo de poner allí, se basa en el esquema JSON, y el esquema JSON proporciona una guía. Finalmente, allí, yay. Esa es mi próxima pregunta. Es genial, y puedes ponerlo allí, está totalmente documentado, pero también hay autocompletado. Así que si hay autocompletado, es genial.
Entonces, ¿odias TS? No, no, esa es la respuesta, no. No, no lo hago. De hecho, Platformatics soporta la compilación completa de TypeScript, así que puedes escribir tus plugins en TypeScript y todo funcionará bien como se espera. Así que sí, no, no odio TypeScript. ¿Qué pasa con los plugins cuando la aplicación se convierte en microservicios? Oh, ya sabes, microservicios es solo un plugin, ¿verdad? Así que, eso es lo que es.
Y cuando se modulariza por dominio, ¿dónde colocas el código que no cae bajo una categoría de dominio particular? Algunos ayudantes para ser reutilizados en los puntos finales de la API. Entonces, está bien, eso son dos partes. Entonces, cuando estás construyendo este tipo de sistema, tienes dos niveles de reutilización. Un nivel de reutilización es típicamente a nivel de código. Y cuando trabajas en equipos más grandes, especialmente en un monolito modular, tiendes a usar un mono-repositorio. Así que cada uno de tus módulos, como mostré, en lugar de ser estructurados, en lugar de ser solo una carpeta, también tiene un agradable JSON adjunto, ¿verdad? Así que podrías tener muy prácticamente una biblioteca de utilidades que estás importando y requiriendo allí. Así que si solo necesitas código para reutilizar la utilidad, puedes simplemente, ya sabes, compartir código. Y eso es todo. Si quieres establecer la parte clave es mantener el dominio separado, mantener la base de datos separada. Mantén los datos de cada dominio contenidos para que no se compartan entre límites. Genial. Pensamientos sobre la separación del transporte HTTP GraphQL PubSub de la lógica de negocio para permitir la reutilización de la lógica de negocio entre ellos.
Separando la Lógica de Negocio y los Contratos de API
Separar la lógica de negocio del transporte es un desafío en el desarrollo de software. Las APIs son contratos entre desarrolladores, permitiendo la comunicación y el acceso a datos y lógica de negocio. La API y su interfaz son cruciales para una colaboración efectiva.
OK. Probablemente me perdí algunos. Sí, es así. OK, entonces, sí, mi punto aquí es que sería bueno hacerlo si pudieras separarlos. Y la dura realidad del desarrollo de software implica que en realidad es muy difícil separar la lógica de negocio del transporte. Y puedes hacerlo, pero requiere un esfuerzo gigantesco. Entonces, por supuesto, si puedes, hazlo. Pero en algún momento, estás pasando de ser un servidor HTTP que expone alguna API a ser una cola que expone alguna API, ¿OK? Y lo que es importante no es solo el code, sino también la forma en que se invoca el code. Y tiendo a poner el estrés en las cosas en las personas, no en el software. Y cuando defines una API, una API no es code. Una API, es un contrato entre personas. Entonces, nosotros, los desarrolladores del back end ofrecemos a ustedes, los desarrolladores de front end, acceso a data y lógica de negocio. Y la API y la interfaz de esa API es en realidad lo que más importa. Porque es lo que, es cómo podemos hablar y comunicarnos con un lenguaje común. Entonces, no sé, espero. ¿Puedes explicarnos Fastified como si tuviéramos cinco años? ¿En serio? ¿Sabes cuando vas y juegas en preescolar con todos tus amigos? Sí, eso es Fastified, ¿de acuerdo? Sabes, también puedes hacer eso, y eso es Fastified, o puedes jugar solo en tu casa, y eso son otros frameworks. No. Genial. ¿Es posible hacer que los plugins de Fastified sean seguros en términos de tipos, podemos estar seguros de que el plugin fue realmente registrado antes de intentar acceder a él? Entonces sí, los plugins de Fastified pueden ser seguros en términos de tipos. De hecho, hay una compatibilidad total donde puedes especificar tus rutas y automáticamente validar tus data y hacerlas seguras en términos de tipos usando Typebox o Zod o JSON Schema 2TS, tú sabes, eso probablemente sea una charla completa, solo mostrando todas estas cosas. Pero hice un video recientemente en YouTube sobre ese tema específico, así que si quieres, puedes ir y buscar Fastified seguro en términos de tipos y verlo, en 10 minutos lo entenderás. Pero sí, esa es la respuesta y solo haz eso. No puedes permitir, asegúrate de que el plugin esté registrado, pero eso requiere un paso extra. Y gracias. Entonces nuestra última pregunta, porque nos quedan unos segundos, es ¿vas a unirte a la fiesta después de la masterclass? Por supuesto que sí. ¡Por supuesto! ¡Vamos! ¿No lo harás tú?
Comments