Microservicios en TypeScript: arquitectura y práctica de la A a la Z

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

Introducción: Por qué TypeScript es la elección ideal para microservicios

El desarrollo moderno de sistemas backend se está alejando cada vez más de los monolitos en favor de la arquitectura de microservicios. TypeScript, al ser una extensión fuertemente tipada sobre JavaScript, ofrece una combinación única de flexibilidad y confiabilidad. La tipificación estática en tiempo de compilación permite detectar errores de integración entre servicios antes de que lleguen a producción, y el rico ecosistema (NestJS, Express, Fastify) proporciona herramientas listas para construir sistemas distribuidos.

En este artículo, analizaremos el ciclo completo: desde el diseño de la arquitectura hasta el despliegue de microservicios en TypeScript. Aprenderá cómo organizar la comunicación entre servicios, configurar brokers de mensajes y garantizar la tolerancia a fallos.



1. Arquitectura de microservicios en TypeScript: principios clave

1.1 Descomposición del dominio

El primer paso es dividir la lógica de negocio en servicios independientes. Cada microservicio se encarga de su propia área limitada (Bounded Context). En TypeScript, esto se expresa de forma natural a través de módulos y paquetes.

Ejemplo de descomposición para una tienda online:

  • Auth Service — autenticación y tokens JWT
  • Product Service — catálogo de productos y precios
  • Order Service — gestión e historial de pedidos
  • Payment Service — procesamiento de pagos

Cada servicio es una aplicación independiente en TypeScript con su propio package.json, configuración y punto de entrada (main.ts).



1.2 Elección del stack tecnológico

Para un inicio rápido, se recomienda usar NestJS, un framework que soporta patrones de microservicios de forma nativa. Proporciona adaptadores de transporte para TCP, Redis, RabbitMQ, Kafka y gRPC.

Stack básico:

  • Lenguaje: TypeScript (modo estricto, strict: true)
  • Framework: NestJS
  • Broker de mensajes: RabbitMQ (a través de @nestjs/microservices)
  • Base de datos: PostgreSQL (cada servicio con su propia BD)
  • Contenerización: Docker + Docker Compose


1.3 Patrones de comunicación

Existen dos enfoques principales: síncrono (HTTP/gRPC) y asíncrono (colas). Para operaciones críticas en tiempo, use solicitudes síncronas; para tareas en segundo plano, use colas.

Ejemplo de configuración de un servicio híbrido en NestJS:

// main.ts — punto de entrada del microservicioimport { NestFactory } from '@nestjs/core';import { MicroserviceOptions, Transport } from '@nestjs/microservices';import { AppModule } from './app.module';

async function bootstrap() { // Servidor HTTP para REST API const app = await NestFactory.create(AppModule); // Conexión a RabbitMQ para intercambio asíncrono app.connectMicroservice<MicroserviceOptions>({ transport: Transport.RMQ, options: { urls: ['amqp://localhost:5672'], queue: 'orders_queue', queueOptions: { durable: true }, }, });

await app.startAllMicroservices(); await app.listen(3000);}bootstrap();


2. Implementación práctica: del modelo de datos a la API

2.1 Creación de un paquete compartido con tipos

Para evitar la duplicación de interfaces entre servicios, extraiga los tipos comunes en un paquete npm separado (por ejemplo, @mycompany/shared-types). Esta es una ventaja clave de TypeScript: una única fuente de verdad para todos los servicios.

// shared-types/src/dto/order.dto.tsexport interface CreateOrderDto {  userId: string;  productId: string;  quantity: number;  totalPrice: number;}

export interface OrderResponse { id: string; status: 'pending' | 'confirmed' | 'cancelled'; createdAt: Date;}


2.2 Implementación de Product Service (REST API)

Servicio de catálogo de productos. Usamos TypeORM para trabajar con PostgreSQL y decoradores de NestJS p

Blogs

Book Recommendations