API Gateway
Conceito e Função
Um API Gateway atua como ponto de entrada único para todos os clientes em uma arquitetura de microserviços. Ele funciona como uma camada intermediária que recebe todas as solicitações dos clientes e as encaminha para os serviços apropriados, abstraindo a complexidade interna da arquitetura para os consumidores da API.
Benefícios do API Gateway
- Ponto de Entrada Único: Simplifica o acesso aos microserviços através de uma interface unificada
- Roteamento Inteligente: Direciona requisições para os serviços corretos baseado em regras configuráveis
- Cross-Cutting Concerns: Centraliza funcionalidades como autenticação, autorização, rate limiting e logging
- Transformação de Dados: Pode modificar requisições e respostas para compatibilidade entre cliente e serviços
- Balanceamento de Carga: Distribui tráfego entre múltiplas instâncias de serviços
- Cache: Armazena respostas frequentes para reduzir latência e carga nos serviços
- Monitoramento: Fornece visibilidade centralizada sobre todas as chamadas de API
Arquitetura do API Gateway no Projeto
Implementação com Nginx
Na fase inicial do projeto, utilizamos o Nginx como API Gateway devido à sua eficiência, baixo consumo de recursos e facilidade de configuração para proxy reverso.
Configuração Básica do Nginx
server {
listen 80;
# User Management Service
location /users {
proxy_pass http://usermanagement:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Feedback Request Service
location /requests {
proxy_pass http://feedbackrequest:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Feedback Response Service
location /responses {
proxy_pass http://feedbackresponse:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Feedback Response View Service
location /responsesview {
proxy_pass http://feedbackresponseview:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
rewrite ^/responsesview(/.*)$ $1 break;
}
}
Evolução para Node.js Express Gateway
Na Sprint 4, evoluiremos o API Gateway para uma implementação baseada em Node.js Express, que oferecerá maior flexibilidade e capacidades programáticas para:
- Autenticação Avançada: Validação e renovação de tokens JWT
- Autorização Contextual: Decisões de acesso baseadas em claims do token e contexto da requisição
- Transformação de Dados: Modificação de requisições e respostas conforme necessário
- Logging Estruturado: Registro detalhado de todas as transações para auditoria e debugging
- Circuit Breaking: Prevenção de falhas em cascata entre serviços
- Métricas e Monitoramento: Coleta de dados de performance e uso em tempo real
Arquitetura do Express Gateway
Implementação no Docker Compose
Para implementar o Node.js Express Gateway, será necessário substituir o serviço Nginx no arquivo docker-compose.yml:
# Configuração atual (Nginx)
nginx:
image: nginx:alpine
volumes:
- ./gateway/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
depends_on:
- usermanagement
- feedbackrequest
- feedbackresponse
- feedbackresponseview
# Nova configuração (Node.js Express)
gateway:
build:
context: ./node_backend
args:
APP_NAME: api_gateway
environment:
- JWT_SECRET_KEY=4Z^XrroxR@dWxqf$!@#qGr4P
- JWT_ISSUER=user-api
- LOG_LEVEL=info
- RATE_LIMIT_WINDOW=15m
- RATE_LIMIT_MAX=100
ports:
- "80:80"
depends_on:
- usermanagement
- feedbackrequest
- feedbackresponse
- feedbackresponseview
Considerações de Segurança
- HTTPS: Em produção, configurar TLS/SSL para todas as comunicações
- Rate Limiting: Implementar limites de requisições para prevenir ataques de DoS
- Validação de Entrada: Filtrar e sanitizar parâmetros de entrada para prevenir injeções
- Headers de Segurança: Configurar headers como CORS, Content-Security-Policy e X-XSS-Protection
- Monitoramento de Segurança: Implementar detecção de padrões suspeitos de tráfego
Próximos Passos
- Implementação de Cache: Adicionar cache de respostas para melhorar performance
- Documentação de API: Integrar Swagger/OpenAPI para documentação automática
- Versionamento de API: Implementar estratégia de versionamento para evolução segura
- Analytics: Coletar métricas de uso para insights de negócio
- Service Discovery: Integrar com ferramentas de service discovery para roteamento dinâmico