¿Por qué NestJS es uno de los mejores frameworks para Node?
La comunidad Javascript es una de las más grandes de desarrollo en todo el mundo, por lo que no es de extrañarse que continúe siendo uno de los lenguajes más utilizados cada año.
Ya sea que estés desarrollando para Backend, tienes muchas opciones para escoger. Si quieres hacer backend, la opción más popular entre muchos desarrolladores es ExpressJS. Sólo necesitas instalar un par de librerías en tu package.json
y ya puedes comenzar a crear tu API o vistas que retornen HTML desde el servidor.
Entonces, al leer el título te preguntarás: ¿Por qué prefiero NestJS, si hay otras opciones más populares como Express o Hapi?
Aquí te daré algunas razones por las cuales he trabajado en algunos proyectos con NestJS y por qué volvería a usarlo.
Es NodeJS (Javascript)
Todos conocemos las ventajas que ofrece NodeJS como framework para Backend, tales como velocidad de ejecución y la suave curva de aprendizaje para las personas que vienen del Frontend.
NodeJs se ha consagrado como una de las tecnologías más utilizadas para desarrollar backend en los últimos años, ya que los programadores frontend en Javascript se sienten más cómodos trabajando en el backend con un lenguaje que ya conocen.
Recomienda, pero no obliga, un orden establecido para trabajar
Y me recuerda mucho a Laravel (PHP).
Me explico, la organización de las carpetas se parece mucho a Angular, no te obliga a ordenar tu código como podrías ver en los tutoriales. Pero he descubierto que una cierta manera de organizar los archivos es una combinación de cualquier framework MVC + Angular. Para cualquier persona que haya trabajado en otro framework Backend que no sea ExpressJS, se sentirá más cómoda haciendo la transición a Nest.
Bases de datos y ORMs
NestJS funciona muy bien con casi todos los motores de base de datos más populares. Ya sea MySQL, PostgreSQL, MongoDB, etc.
Viene además con soporte para distintos ORM, como TypeORM, Sequelize, MikroORM, Prisma, etc.
Las tablas o esquemas de la base de datos se pueden crear con Typescript, lo cual es muy útil para evitar errores de síntaxis.
Soporte para Typescript
Desde 2020, el número de desarrolladores que utilizan Typescript ha ido en aumento. Creo que esto se debe a la envergadura de los proyectos actuales y a la popularidad del frontend. Dado que hay muchos datos que conectar entre ambos lados del desarrollo: Backend y Frontend, es necesario promover ciertos estándares para evitar que los nuevos integrantes de un equipo se confundan acerca del tipo de variables o funciones que se deben utilizar en todo el proyecto. Es aquí donde Typescript resulta muy útil. Además, no debemos olvidar que el soporte de autocompletado, según tu editor, es mucho más intuitivo.
Cuando NestJS utiliza Typescript, la facilidad para escribir código aumenta considerablemente y, al mismo tiempo, se reducen los errores en los tipos de datos antes de la compilación.
Documentación
Lo que más me encanta de un framework es la documentación y los ejemplos que se presentan en su sitio web. Una mala documentación es una de las principales razones por las que un desarrollador junior a medio no se siente tan motivado para trabajar con un framework web y, por lo tanto, evita su uso. Creo que en este punto, NestJS cumple con este requisito. Es una de las mejores documentaciones de framework backend que he visto, al nivel de otros proyectos como Laravel.
Entornos de desarrollo veloces con SWC
NestJS tiene soporte para SWC , un entorno de compilación hecho en Rust, que puede incrementar la velocidad de compilación de Typescript hasta 20 veces más rápido que el compilador de Typescript por defecto.
Soporte para aplicaciones en microservicios o serverless
NestJS no solo está hecho para ser desplegado en cualquier servidor VPS. También ofrece soporte para desplegarse en contenedores y aprovechar la arquitectura de microservicios.
Incluso soporta el protocolo RPC, que es muy útil para la comunicación entre microservicios. Utiliza la biblioteca gRPC.
Además, si deseas desplegar tu aplicación en un proveedor de serverless como AWS Lambda, sin necesidad de cargar todas las bibliotecas que el framework trae por defecto, NestJS te lo permite.
Websockets
Si necesitas conexiones en tiempo real para tu aplicación, NestJS te permite hacerlo con Websockets. Soporta respuestas asíncronas, múltiples respuestas, etc.
Soporte OpenAPI con Swagger
Si necesitas documentar tu API, NestJS puede conectarse a Swagger. Swagger además te permite probar tus endpoint directamente desde el navegador sin el uso de una herramienta para testing de API como Postman.
Es también útil para compartir los endpoint con otros equipos de trabajo.
Soporte GraphQL
Si necesitas integrar GraphQL, NestJS tiene pasos sencillos para hacerlo. Sólo recuerda que en este modo, necesitas dejar de lado los controladores REST y usar los resolvers de GraphQL.
Devtools
Nest agregó recientemente una herramienta para desarrolladores que permite ver la organización de tu aplicación en tiempo real. Puedes ver como tus módulos y servicios están conectados entre sí y evitar las dependencias circulares.
Organización de tareas (Crons)
Cuando se necesiten ejecutar tareas en segundo plano, no necesitas tener un cronjob en tu servidor. NestJS te permite hacerlo con un decorador.
Esta característica es útil si necesitas realizar tareas automáticas, como enviar un correo electrónico cada ciertas horas, o actualizar la información en la base de datos en algún momento del día.
Caché
Si no deseas realizar una consulta a la base de datos para obtener fragmentos de información que no cambian con frecuencia, NestJS permite agregar caché a tu aplicación.
No solo añade caché a los endpoints REST, sino también a patrones como Websockets y Microservicios.
Encriptación y hashing
Cuando se necesita intercambiar datos entre diferentes microservicios o partes de la aplicación, es importante considerar la seguridad de la información, ya que puede ser interceptada. En NestJS, puedes cifrar los datos para asegurar su confidencialidad.
NestJS utiliza la biblioteca nativa de criptografía de NodeJS, llamada crypto
.
Y muchas características más
NestJS tiene muchas más características que no he mencionado en este artículo. Haré un rápido listado de otras características que podrías encontrar útiles:
- Sesiones
- Protección contra ataques de CSRF
- Pipes
- Creación de aplicaciones CLI
- Healthchecks
- Soporte NATS, MQTT, Kafka, RabbitMQ, etc.
Conclusión
Estas son, creo yo, las razones principales por las cuales, en cualquier nuevo proyecto que requiera Node para el Backend, yo usaría NestJS sin ninguna duda. Por supuesto, hay más features que simplifican el trabajo en el backend. Todo eso te invito a que lo descubras en su documentación .