Microsserviços em TypeScript: por onde começar em 2024

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Microsserviços em TypeScript: seu primeiro passo para uma arquitetura modular

\n\n

Imagine que você está construindo uma casa. Pode-se erguer uma parede enorme e depois adicionar cômodos a ela. Mas se um cômodo quebrar — todo o edifício sofre. A alternativa é construir módulos separados: cozinha, quarto, sala de estar, cada um com sua própria fiação e encanamento. É mais ou menos assim que funcionam os microsserviços — componentes independentes e fracamente acoplados que se comunicam pela rede.

\n\n

TypeScript para microsserviços não é apenas uma tendência da moda, mas uma ferramenta que salva do caos. A tipagem estática detecta erros em tempo de compilação, não em produção. Neste artigo, vamos analisar por onde começar se você quiser migrar de um monólito para microsserviços em TypeScript. Sem enrolação, com exemplos reais de código.

\n\n

Por que TypeScript e não JavaScript puro?

\n\n

Ao escrever microsserviços, cada serviço é um projeto separado. Sem tipos, é fácil se confundir: qual formato de dados o serviço A espera, o que o serviço B retorna? O TypeScript resolve esse problema:

\n\n
    \n
  • Interfaces e tipos — você define claramente os contratos entre os serviços.
  • \n
  • Autocompletar e refatoração — a IDE sugere os campos dos objetos, e renomear não quebra o código.
  • \n
  • Compatibilidade com Node.js — TypeScript compila para JavaScript, funciona em qualquer lugar onde o Node está presente.
  • \n
\n\n

Exemplo: imagine que o serviço de pedidos envia dados para o serviço de entrega. Sem tipos, você pode acidentalmente passar uma string em vez de um número. O TypeScript dirá: "Ei, aqui é esperado um number, mas você está enviando uma string".

\n\n

Ferramentas para começar

\n\n

Para começar, você precisará de:

\n\n
    \n
  • Node.js (versão 18+) — ambiente de execução.
  • \n
  • TypeScript — instale globalmente ou no projeto.
  • \n
  • NestJS — framework para aplicações server-side. Ele suporta nativamente a arquitetura de microsserviços.
  • \n
  • RabbitMQ ou NATS — brokers de mensagens para comunicação assíncrona.
  • \n
  • Docker — conteinerização de cada serviço.
  • \n
\n\n

Não se preocupe, tudo isso é configurado em 15 minutos.

\n\n

Passo 1: Criando o primeiro microsserviço com NestJS

\n\n

NestJS é como o Angular para o backend. Ele usa decoradores, módulos e providers. Vamos instalá-lo:

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

Agora vamos transformar uma aplicação comum em um microsserviço. Abra o 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, // ou 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

Criamos um microsserviço que escuta na porta TCP 3001. Agora vamos adicionar um manipulador de mensagens no 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    // Simulação de consulta ao banco de dados\n    return { id: data.id, name: 'Alice', email: 'alice@example.com' };\n  }\n}
\n\n

Pronto! O primeiro microsserviço está criado. Ele recebe uma mensagem com o padrão get_user e retorna os dados do usuário.

\n\n

Passo 2: Criando um segundo serviço e organizando a comunicação

\n\n

Vamos criar outro serviço — order-service. Ele solicitará dados ao user-service.

Blogs

Book Recommendations