Pular para conteúdo

Aula 20 - Projeto Capstone: Gateway de APIs Autônomo e Escalável 🏆

Objetivo Pedagógico

Objetivo: Construção de um API Gateway autônomo e resiliente, integrando roteamento dinâmico, validação de JWT, rate limiting com Redis e métricas de observabilidade.


📑 1. Fundamentos Teóricos & Análise Técnica

O Projeto Capstone de Backends e APIs é o desafio prático culminante da disciplina. Ele coloca o estudante no papel de Arquiteto de Software responsável por projetar e implementar o ponto central de entrada de uma malha de microsserviços: o API Gateway.

O Gateway funciona como uma fachada reversa (Reverse Proxy) que abstrai a complexidade interna dos serviços downstream, centralizando requisitos não-funcionais transversais.

O projeto consolidará os seguintes componentes de engenharia: 1. Roteamento Dinâmico de Tráfego: Encaminhamento inteligente de requisições com reescrita de rotas (path rewriting) e balanceamento de carga básico. 2. Autenticação Unificada: Interceptação de cabeçalhos Authorization: Bearer <JWT>, validação da assinatura criptográfica e injeção do cabeçalho enriquecido X-User-Id para os serviços internos. 3. Mecanismo de Rate Limiting: Proteção de endpoints sensíveis (ex: /api/v1/auth/login) com Redis em janela deslizante. 4. Resiliência e Observabilidade: Implementação de timeouts agressivos, tratamento de erro 502/504 e registro estruturado de logs com correlation IDs (X-Correlation-ID).

📐 Arquitetura Conceitual & Diagrama de Fluxo

graph TD
    Client["Clientes Externos (Web / Mobile)"] --> Gateway["API Gateway Centralizado"]
    Gateway --> RL["Redis (Rate Limiter Sliding Window)"]
    Gateway --> JWT["Validador JWT (JWKS Cache)"]
    Gateway --> ServiceUsers["Microsserviço de Usuários (Porta 3001)"]
    Gateway --> ServiceCatalog["Microsserviço de Catálogo (Porta 3002)"]
    Gateway --> ServiceOrders["Microsserviço de Pedidos (Porta 3003)"]
    style Client fill:#e1f5fe,stroke:#01579b
    style Gateway fill:#fff3e0,stroke:#e65100
    style RL fill:#e8f5e9,stroke:#2e7d32
    style ServiceOrders fill:#f3e5f5,stroke:#7b1fa2

🔍 Pilares e Diretrizes Técnicas

Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Padrão BFF (Backend for Frontend): Adaptação de payloads sob medida para as necessidades específicas de cada cliente. - Rastreabilidade Distribuída: Propagação do X-Correlation-ID por toda a cadeia de microsserviços para depuração com OpenTelemetry. - Isolamento de Segurança: Os microsserviços de backend não são expostos diretamente à internet pública. - Fail-Fast e Circuit Breaker: Interrupção rápida de chamadas para serviços degradados para não sobrecarregar o Gateway.


🛠️ 2. Implementação Prática em API Gateway, Proxy Reverso e Microsserviços

Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:

// gateway-proxy.ts (Núcleo do API Gateway com Proxy e Headers)
import express, { Request, Response } from 'express';
import { createProxyMiddleware } from 'http-proxy-middleware';
import { randomUUID } from 'crypto';

const app = express();

// 1. Middleware de Correlação de Logs
app.use((req: Request, res: Response, next) => {
  const correlationId = req.headers['x-correlation-id'] || randomUUID();
  req.headers['x-correlation-id'] = correlationId;
  res.setHeader('X-Correlation-ID', correlationId);
  next();
});

// 2. Roteamento Reverso para o Microsserviço de Catálogo
app.use('/api/v1/catalog', createProxyMiddleware({
  target: 'http://localhost:3002',
  changeOrigin: true,
  pathRewrite: { '^/api/v1/catalog': '' },
  onProxyReq: (proxyReq, req) => {
    // Injeta cabeçalho de usuário autenticado
    proxyReq.setHeader('X-Gateway-Auth', 'Authorized-Internal');
  }
}));

app.listen(8080, () => {
  console.log('[API Gateway] Operando na porta 8080.');
});

💡 Análise Passo a Passo do Código

  1. Correlation ID Global: Gera ou propaga identificador único para rastrear a requisição em todas as etapas da arquitetura distribuída.
  2. Proxy Reverso Seguro: createProxyMiddleware redireciona o tráfego HTTP sem revelar as portas internas dos microsserviços.
  3. Path Rewrite Automático: Limpa o prefixo do gateway (/api/v1/catalog) antes de entregar a requisição na rota raiz do serviço downstream.

🎯 3. Próximos Passos & Sequência Didática