Microservicios en TypeScript: por dónde empezar en 2024

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Microservicios en TypeScript: tu primer paso hacia una arquitectura modular

\n\n

Imagina que estás construyendo una casa. Puedes levantar una enorme pared y luego agregarle habitaciones. Pero si una habitación se rompe, todo el edificio sufre. La alternativa es construir módulos separados: cocina, dormitorio, sala de estar, cada uno con su propia instalación eléctrica y fontanería. Así es más o menos como funcionan los microservicios: componentes independientes y débilmente acoplados que se comunican a través de la red.

\n\n

TypeScript para microservicios no es solo una tendencia de moda, sino una herramienta que salva del caos. La tipificación estática detecta errores en la etapa de compilación, no en producción. En este artículo, analizaremos por dónde empezar si quieres pasar de un monolito a microservicios en TypeScript. Sin rodeos, con ejemplos de código reales.

\n\n

¿Por qué TypeScript y no JavaScript puro?

\n\n

Cuando escribes microservicios, cada servicio es un proyecto separado. Sin tipos, es fácil confundirse: ¿qué formato de datos espera el servicio A?, ¿qué devuelve el servicio B? TypeScript resuelve este problema:

\n\n
    \n
  • Interfaces y tipos — defines claramente los contratos entre servicios.
  • \n
  • Autocompletado y refactorización — el IDE sugiere las propiedades de los objetos y renombrar no rompe el código.
  • \n
  • Compatibilidad con Node.js — TypeScript se compila a JavaScript, funciona dondequiera que haya Node.
  • \n
\n\n

Ejemplo: imagina que el servicio de pedidos envía datos al servicio de envío. Sin tipos, podrías pasar accidentalmente una cadena en lugar de un número. TypeScript dirá: «Oye, aquí se espera un number, pero estás enviando un string».

\n\n

Kit de herramientas para empezar

\n\n

Para empezar, necesitarás:

\n\n
    \n
  • Node.js (versión 18+) — entorno de ejecución.
  • \n
  • TypeScript — instálalo globalmente o en el proyecto.
  • \n
  • NestJS — framework para aplicaciones de servidor. Soporta de forma nativa la arquitectura de microservicios.
  • \n
  • RabbitMQ o NATS — brokers de mensajes para comunicación asíncrona.
  • \n
  • Docker — contenedorización de cada servicio.
  • \n
\n\n

No temas, todo esto se configura en 15 minutos.

\n\n

Paso 1: Creamos el primer microservicio con NestJS

\n\n

NestJS es como Angular para el backend. Usa decoradores, módulos y proveedores. Instalémoslo:

\n\n
npm i -g @nestjs/cli\nnest new user-service\ncd user-service\nnpm install @nestjs/microservices
\n\n

Ahora convertimos la aplicación normal en un microservicio. Abrimos main.ts:

\n\n
import { NestFactory } from '@nestjs/core';\nimport { MicroserviceOptions, Transport } from '@nestjs/microservices';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.createMicroservice<MicroserviceOptions>(\n    AppModule,\n    {\n      transport: Transport.TCP, // o Redis, RabbitMQ\n      options: {\n        host: '0.0.0.0',\n        port: 3001,\n      },\n    },\n  );\n  await app.listen();\n  console.log('User microservice is listening on port 3001');\n}\nbootstrap();
\n\n

Hemos creado un microservicio que escucha en el puerto TCP 3001. Ahora agregamos un manejador de mensajes en app.controller.ts:

\n\n
import { Controller } from '@nestjs/common';\nimport { MessagePattern, Payload } from '@nestjs/microservices';\n\n@Controller()\nexport class AppController {\n  @MessagePattern('get_user')\n  getUser(@Payload() data: { id: number }) {\n    // Simulación de consulta a la BD\n    return { id: data.id, name: 'Alice', email: 'alice@example.com' };\n  }\n}
\n\n

¡Listo! El primer microservicio está preparado. Recibe un mensaje con el patrón get_user y devuelve los datos del usuario.

\n\n

Paso 2: Creamos el segundo servicio y organizamos la comunicación

\n\n

Haremos otro servicio — order-service. Solicitará datos a user-service.

Blogs

Book Recommendations