La edición empresarial de JavaScript (JsEE) ?
En pocos minutos, no podrás vivir sin NestJs. Lanzado en 2017, la versión 7 de este framework de código abierto para NodeJs, acumula casi 45.000 estrellas en Github.
Con su aspecto escalable y su arquitectura fuertemente inspirada en Angular (el framework de front-end de Google), fue rápidamente adoptado por la comunidad para permitir a los desarrolladores pasar de forma sencilla del front-end al back-end. ¿Por qué NestJS, entre otros muchos frameworks, se ha hecho tan popular?
¿Alguna vez has querido trabajar en una aplicación fácilmente escalable en NodeJs con todas las ventajas de un marco empresarial como Spring o .NET, al mismo tiempo que tienes una visión a largo plazo de tu proyecto? ¿O permitir que tu aplicación se estandarice entre tus equipos de desarrollo en un único lenguaje? Eso es lo que hace NestJs.
NodeJs
¿Del back-end en Javascript?
NodeJs permite la ejecución de JavaScript en el lado del servidor con muy poco código. Esto es útil para crear potentes aplicaciones de servidor (como pequeños proyectos o proyectos secundarios back-end). Es su simplicidad y minimalismo lo que hizo su éxito.
Tiene la gran ventaja de funcionar con un motor V8 de JavaScript, lo que lo hace muy potente. Otra ventaja es que puede ejecutarse en un solo proceso sin crear un nuevo hilo para cada solicitud.
Los límites de NodeJS
Dado el minimalismo del código, puede ser necesario utilizar recursos importantes para usos sencillos. Además, cada desarrollador estructura su código (middlewares, enrutamiento, manejador de errores…) a su manera, lo que puede perjudicar su legibilidad. Por ejemplo, si dos equipos trabajan en el desarrollo de una aplicación NodeJs, es poco probable que la estandarización de su código siga el mismo modelo. Así que, incluso con estos marcos, la capacidad de mantenimiento se vuelve difícil a medida que el proyecto y los equipos crecen.
Los principales frameworks para NodeJs
Ha surgido un gran número de frameworks para NodeJs, cada uno con sus propias especificaciones según los usos.
Algunos se centran únicamente en la prestación y creación de servicios REST (restify, loopBack). El objetivo es proporcionar un marco fácil de usar para exponer servicios a otras aplicaciones web.
Otros son más completos (como Sails), para tratar de proporcionar muchas características, hasta permitir la gestión front-end y back-end de las aplicaciones (con un modelo MVC).
El marco más popular es probablemente Express.js, un marco rápido, intuitivo y minimalista. Sin embargo, la simplicidad tiene sus límites… Y ahora NestJs entra en escena.
El marco NestJs para NodeJS
Lenguaje y paradigma
¿Deberíamos hablar de NestJs? Debería ser NestTS (TypeScript). De hecho, es uno de los únicos frameworks construidos enteramente en torno a TypeScript (Angular2 obliga). Esto permite no sólo tener un código fuertemente tipado, sino también un framework que explota todas las ventajas de TypeScript con decoradores, Types, Tuples, etc. Además, para los puristas, es totalmente compatible con JS vanilla (a pesar de que faltan algunas características).
Y eso no es todo: en términos de paradigmas de programación, se basa en gran medida en la POO para gestionar sus módulos y recursos de objetos. Pero también en la programación funcional y reactiva para gestionar las peticiones del servidor.
Servidores y rendimiento
NestJs tiene un nivel de abstracción tan alto que puede ser configurado en varios servidores HTTP (como JEE donde se puede elegir TomCat, WildFly u otro), basado por defecto en ExpressJs.
Si tu aplicación necesita responder a un gran número de peticiones por segundo, podemos interconectar con Fastify. Es una buena alternativa en términos de rendimiento:
¿Qué herramientas para NestJs?
Otra ventaja que ofrece el framework NestJs es que no tendrás que estar buscando nuevas bibliotecas en GitHub. El marco le proporciona la herramienta adecuada para su caso de uso específico.
« Build once, use everywhere »
Hay muchos conceptos reutilizables para gestionar su servidor, como interceptores para el manejo de errores, tuberías para comprobar los datos de las solicitudes entrantes, guardias para la seguridad.
El framework también integra directamente en su código las librerías back-end de JavaScript más populares, como PassportJs, Helmet, JOI, Cron, TypeORM, Mongoose, bull…
Sólo tendrá que integrarlos en su proyecto con, por ejemplo, un archivo : @Nest/joi. Toda la información sobre cada biblioteca se presenta en la documentación del marco, con casos de uso claros.
Y además de todas estas herramientas clásicas de la API REST, NestJs va más allá al ser “agnóstica a la plataforma”. Es decir, podrás construir un servidor compatible con REST y utilizar esta misma aplicación para trabajar al mismo tiempo con GraphQl (mientras integras tus microservicios favoritos: kafka, gRPC, redis…).
Las ventajas de NestJs
NestJS está fuertemente inspirado en Angular 2, lo que induce a considerarlo como obcecado y con una fuerte extensibilidad de su arquitectura.
Un framework sin apertura permite al desarrollador diseñar el código como quiera (por ejemplo, ExpressJs). En cambio, NestJs exige que todos los proyectos estén estructurados y estandarizados de la misma manera.
Esto permitirá a los desarrolladores tener la misma conformidad en la forma de codificar en el back-end (y posiblemente tener un equipo codificando aplicaciones de extremo a extremo en TypeScript).
Está estructurado para construir la aplicación módulo a módulo (Domain-Driven Design). Toda su aplicación se construye en torno a esta noción de módulo (también llamado dominio o recurso).
Si tomamos el ejemplo de la lógica de una aplicación REST, podemos generar instantáneamente un nuevo recurso con todos sus controladores CRUD a través de la CLI (Command Line Interface) de NEST.
DEMO – Te toca jugar
Las desventajas de NestJs
- Si nunca has hecho Angular (o TS), se necesita un poco de habilidad para entender la estructuración de módulos de una aplicación NestJs.
- Si se quiere ser exhaustivo en la declaración de los controladores, codificar muchas anotaciones alrededor de cada uno de ellos puede hacerlos rápidamente verboso.
- Cuando necesites entrar en detalles sobre ciertas opciones de anotación, por ejemplo, tendrás que ir indagando en el código fuente de @Nest/core. Esto podría mejorarse haciendo que aparezcan en el documento de una API NestJs.
- NestJs sigue siendo una herramienta sujeta a algunas de las limitaciones de NodeJs. Es probable que los cálculos pesados de su aplicación deban ejecutarse en otro tipo de servidor.
Para concluir
NestJS es un completo framework de back-end que se presenta como la mejor alternativa para crear una aplicación mediana o grande en NodeJS.
A diferencia de otros, tiene la inteligencia de inspirarse e integrar muchos conceptos (o incluso bibliotecas) que ya han sido probados. Así, su arquitectura inspirada en Angular le permite centrarse en su verdadero valor añadido al tiempo que garantiza la calidad del código producido. ¿Sus principales activos? Permite construir aplicaciones escalables, comprobables y mantenibles. Pero también requiere algo de práctica para cogerle el tranquillo.
¿Todavía no está convencido? Te aconsejamos que eches un vistazo a la documentación (muy bien hecha) que está llena de buenas prácticas e integra librerías útiles, sea cual sea el lenguaje utilizado. También te recomendamos que vuelvas con regularidad porque la creciente popularidad de NestJs garantiza el apoyo de una comunidad muy activa.