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
- Correlation ID Global: Gera ou propaga identificador único para rastrear a requisição em todas as etapas da arquitetura distribuída.
- Proxy Reverso Seguro:
createProxyMiddlewareredireciona o tráfego HTTP sem revelar as portas internas dos microsserviços. - 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
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto