Cómo Elegir el Framework Adecuado para tus Microservicios: NestJS, Express o Sin Framework





Tomar decisiones sobre qué framework utilizar para desarrollar microservicios puede parecer simple, pero en realidad es un proceso complejo que puede afectar significativamente la eficiencia y escalabilidad de tu aplicación. Como desarrolladores enfocados en startups, es esencial encontrar el equilibrio adecuado entre funcionalidad y simplicidad. A continuación, comparto mi experiencia y los factores que consideré al decidir entre usar NestJS, Express o prescindir de un framework por completo.


Sin ningún Framework

En ciertos casos, la mejor opción es no utilizar ningún framework. Por ejemplo, cuando necesité configurar colas como Amazon SQS y apuntarlas a funciones Lambda, no había necesidad de enrutamiento ni de exponer rutas HTTP específicas. En esta situación:

  • Simplicidad: Evité la complejidad innecesaria al no incorporar un framework que no aportaría beneficios significativos para este caso de uso.

  • Estructura personalizada: Implementé una arquitectura basada en Domain-Driven Design (DDD), creando las carpetas y controladores necesarios para escuchar y procesar los mensajes de SQS.

  • Eficiencia: Al eliminar capas adicionales, mejoré el rendimiento y reduje el tiempo de desarrollo.

Conclusión: Si tu microservicio no requiere exponer APIs ni manejar enrutamiento, y su funcionalidad es específica y limitada, prescindir de un framework puede ser la decisión más acertada.

Node.js + Express

Cuando el proyecto requiere exponer APIs para ser consumidas por otros servicios o aplicaciones, pero no necesita la complejidad de un framework completo, Express se presenta como una opción ligera y eficiente. En mi experiencia:

  • Flexibilidad: Express proporciona funcionalidades básicas de enrutamiento y middleware sin imponer una estructura rígida.

  • Rapidez de desarrollo: Su simplicidad permite un desarrollo más ágil, ideal para microservicios que deben implementarse rápidamente.

  • Comunidad y soporte: Cuenta con una amplia comunidad y numerosos paquetes que facilitan la incorporación de funcionalidades adicionales si es necesario.

En un proyecto donde necesitaba implementar algunas funcionalidades complejas y exponer un API, pero sin requerir módulos avanzados, seguridad robusta o inyecciones de dependencias complejas, Express fue la elección adecuada.

Conclusión: Si necesitas exponer tu microservicio a través de un API y requieres enrutamiento básico sin la sobrecarga de un framework más pesado, Node.js con Express es una opción sólida.

NestJS

Para proyectos más complejos y escalables, donde la seguridad, la modularidad y la mantenibilidad son esenciales, NestJS se convierte en la herramienta ideal. Al desarrollar un microservicio de pagos:

  • Arquitectura sólida: NestJS utiliza una arquitectura modular inspirada en Angular, lo que facilita la organización y escalabilidad del proyecto.

  • Inyección de dependencias: Simplifica la gestión de dependencias, lo que es crucial en aplicaciones grandes.

  • Funcionalidades avanzadas: Ofrece soporte integrado para seguridad, validaciones, interceptores y más.

  • TypeScript: Al estar construido sobre TypeScript, proporciona tipado estático, lo que mejora la calidad del código y facilita el mantenimiento.

Conclusión: Si anticipas que tu proyecto crecerá en complejidad y necesitas funcionalidades avanzadas desde el inicio, NestJS es la opción más adecuada.

Preguntas para Ayudarte a Decidir

Para determinar qué opción es la mejor para tu caso, considera las siguientes preguntas:

  1. ¿Necesitas exponer un API o manejar enrutamiento?

    • : Considera usar Express o NestJS.

    • No: Podrías prescindir de un framework.

  2. ¿El proyecto requiere funcionalidades avanzadas como seguridad, inyección de dependencias o modularidad?

    • : NestJS es la opción más apropiada.

    • No: Express podría ser suficiente.

  3. ¿Qué tan complejo esperas que sea el proyecto en el futuro?

    • Alto crecimiento: Opta por NestJS para facilitar la escalabilidad.

    • Proyecto puntual: Express o sin framework podrían ser más eficientes.

Plantillas para Comenzar

Para agilizar el inicio de tus proyectos, aquí tienes algunas plantillas:

Sin Framework:

  • Estructura basada en DDD.

  • Controladores personalizados para manejar lógica específica.

  • Scripts de inicio y configuración minimalistas.

Aqui lo importante es el handler.ts y la estructura de tu carpeta.

export const handler: SQSHandler = async (event: SQSEvent) => {

for (const record of event.Records) {

const OWNER = record.messageAttributes?.Owner?.stringValue;

}

};




  • Node.js + Expresshttps://github.com/jbmarflo/nodejs-express-serverless-template

    • Configuración básica con rutas y middlewares esenciales.

    • Estructura organizada para facilitar el mantenimiento.

    • Ejemplos de manejo de errores y respuestas estándar.

  • NestJS:

    • Utiliza el Nest CLI para generar la base del proyecto.

    • Módulos predefinidos para autenticación, servicios y controladores.

    • Configuraciones para entornos de desarrollo y producción.

Reflexiones Finales

Elegir el framework adecuado es una decisión estratégica que impacta en la eficiencia, escalabilidad y mantenibilidad de tus microservicios. Es fundamental evaluar las necesidades específicas de cada proyecto y considerar factores como la complejidad, el tiempo de desarrollo y las habilidades del equipo.

Recuerda que no existe una solución única para todos los casos. La clave está en seleccionar la herramienta que mejor se adapte a los requerimientos actuales y futuros de tu aplicación.

Comentarios