Nest Microservices

¿Cómo crear microservicios con Nest?

· 5 min de lectura
Nest Microservices

Dando una breve introducción al tema NestJS es un marco de Node.js diseñado para usarse con TypeScript para crear aplicaciones del lado del servidor eficientes y escalables.

¿Qué es Nest Microservices?

Nest  proporciona a los desarrolladores un marco moderno del lado del servidor para desarrollar aplicaciones sobresalientes con su arquitectura modular. El razonamiento detrás de la arquitectura modular se basa en los beneficios de su organización, ya que divide el código en módulos y mitiga la existencia de bases de código desorganizadas.

Su naturaleza del lado del servidor que permite escribir, mantener y escalar aplicaciones más fácilmente. También proporciona herramientas para simplificar el proceso de desarrollo sin dejar de prometer resultados de alta calidad.

Brindando un nivel de abstracción por encima de estos marcos comunes de Node.js (Express / Fastify), pero también expone sus API directamente al desarrollador. Esto les da a los desarrolladores la libertad de usar la gran cantidad de módulos de terceros que están disponibles para la plataforma subyacente.

DATOS RELEVANTES

via GIPHY

Además de las arquitecturas de aplicaciones tradicionales (a veces llamadas monolíticas), Nest soporta de forma nativa el estilo arquitectónico de desarrollo de microservicios.

La mayoría de los conceptos discutidos en esta documentación como la inyección de dependencia, los decoradores, los filtros de excepción pipes, guards y los interceptores, se aplican igualmente a los microservicios.

Nest.js se creó para ayudar a los desarrolladores a crear monolitos y microservicios. Es fácil de usar, rápido de aprender y fácil de aplicar
Aprovecha TypeScript, un lenguaje fuertemente tipado que es un superconjunto de JavaScript

Siempre que es posible, Nest abstrae los detalles de implementación para que los mismos componentes puedan ejecutarse en plataformas basadas en HTTP, WebSockets y Microservicios. Esta sección cubre los aspectos de Nest que son específicos de los microservicios.

En Nest, un microservicio es fundamentalmente una aplicación que utiliza una capa de transporte diferente a HTTP.

Si todo esto prefieres que te lo cuente, ve de inmediato a nuestro video

CARACTERÍSTICAS

  • Un marco progresivo de Node.js para crear aplicaciones del lado del servidor eficientes, confiables y escalables.
  • Brinda verdadera flexibilidad al permitir el uso de cualquier otra biblioteca gracias a la arquitectura modular.
  • Versátil. Un ecosistema adaptable que es una columna vertebral completa para todo tipo de aplicaciones del lado del servidor.
  • Progresivo. Aprovecha las últimas funciones de JavaScript, brindando patrones de diseño y soluciones maduras al mundo de Node.js.
  • Potente interfaz de línea de comandos (CLI) para impulsar la productividad y facilitar el desarrollo.
  • Soporte para docenas de módulos específicos de Nest que lo ayudan a integrarse fácilmente con tecnologías y conceptos comunes como Type ORM, Mongoose, GraphQL, Logging, Validation, Caching, WebSockets y mucho más.
  • Aplicaciones sencillas de prueba unitaria.
  • Gran documentación.
  • Creado para aplicaciones empresariales a gran escala.

COMPONENTES CENTRALES

  1. Los controladores son responsables de manejar las solicitudes entrantes y responder al lado del cliente de la aplicación.
  2. Los módulos se utilizan para estructurar el código y separar la funcionalidad en fragmentos lógicos y reutilizables.
  3. Proveedores o servicios que abstraen la complejidad y la lógica del usuario. Es posible inyectar el servicio en controladores u otros servicios.

NestJS integra Typescript por defecto


Typescript, viene integrado por defecto en NestJS es otra de las grandes ventajas de este framework. No sólo lo integra por defecto, sino que explota al máximo sus características, que forman parte integral de su concepción, en concreto destacaría:

Decoradores


Se basa en ellos al igual que hace ANGULAR para definir y extender el funcionamiento de los diferentes componentes del sistema, utilizándolos como base para definir la estructura de tu aplicación y permitiendo adaptar funcionalidad reutilizable y proporcionada por el framework de manera muy clara y legible

Tipos / Interfaces


Te permite definir ese contrato de comunicación entre los diferentes módulos y capas del sistema y que detallaré en la sección de DTOs
Este contrato se vuelve crucial según nuestra aplicación va creciendo para asegurar en todo momento la coherencia entre las diferentes partes de la misma.

Arquitecturas clean con NestJS

En un entorno cambiante como el nuestro es importante que nuestras aplicaciones estén diseñadas para no tener dependencias de frameworks externos que pueden cambiar.

Cuando desarrollamos un servidor las dos dependencias externas que suelen aparecer de primeras son: API y base de datos.

NestJS nos abstrae la capa de API a través de decoradores específicos (@Get, @Post, @Body) asociando endpoints a funciones totalmente abstraídas del framework de API y sobre las que ya podemos incorporar test unitarios, entre otros.

controller ('user')
export class UsersController {
    @get ()
    async getUsers (@Query(ValidationPipe) filter) {
    }
    @post ()
    async registerUser (@body () userData) {
    }
    @delete ('/:id') 
    async deleteUser (@param ('id') id: string) { 
        // Delete User ...
        }
    }

DTOs / Pipes de validación

Una vez separada nuestra capa de lógica de la aplicación de las capas externas, NestJS nos provee de las herramientas necesarias para proporcionar la robustez necesaria a dicha lógica.

Podemos definir DTOs de las entidades más importantes de nuestra aplicación, utilizando para ello clases o interfaces que nos permitan trabajar con ellas de una manera sencilla por los diferentes módulos.

Pero no solo eso, sino que los DTOs están ligados con la capacidad de validación incluida por defecto en NestJS, que a través de decoradores nos permiten indicar las características de nuestra entidad. Estas validaciones se realizarán a través de pipes que se pueden integrar en los diferentes endpoints.

enum Roles {
    USER = 'USER',
    ADMIN = 'ADMIN', 
}
export class UserDto {
    @IsNotEmpty ()
    name: string; 
    @IsEmail ()
    email: string;
    @IsNotEmpty ()
    @IsIn ([ROLES.USER, ROLES.ADMIN]) 
    role: string; 
}

Testea todo con Jest e Inyección de dependencias

Desde el momento cero en que empiezas a crear tu aplicación, tienes una suite de tests preparada para ejecutar test unitarios de tu aplicación y extenderlos como mejor consideres.

Todo esto es gracias a Jest, uno de los frameworks más utilizados hoy en día para ejecutar test unitarios sobre Javascript.

La principal ventaja de NestJS es la creación de tus dependencias utilizando inyección de dependencias, lo que te permitirá por ejemplo mockear tus repositorios de datos en los tests pudiendo de manera rápida y sencilla testear tu aplicación con cualquier batería de datos que se te ocurre sin necesidad de tener que reproducir manualmente esos inputs de datos en tu sistema.

Tenemos más

via GIPHY

Integración con las librerías más extendidas de GraphQL, Websockets, Microservicios… si bien es cierto que muchas de ellas son librerías aún no están del todo asentadas y tienen un largo recorrido por delante, NestJS deja clara su intención de estar a la última y facilitarnos la adaptación de las últimas tendencias de programación en nuestros desarrollos.

Plataforma de cursos gratis sobre programación


Artículos Relacionados

Uso de React en aplicaciones Angular
· 4 min de lectura
Paquete npm single-spa
· 16 min de lectura