Pular para conteúdo

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

mmd

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.

mmd

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:

  1. Autenticação Avançada: Validação e renovação de tokens JWT
  2. Autorização Contextual: Decisões de acesso baseadas em claims do token e contexto da requisição
  3. Transformação de Dados: Modificação de requisições e respostas conforme necessário
  4. Logging Estruturado: Registro detalhado de todas as transações para auditoria e debugging
  5. Circuit Breaking: Prevenção de falhas em cascata entre serviços
  6. Métricas e Monitoramento: Coleta de dados de performance e uso em tempo real

Arquitetura do Express Gateway

mmd

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

  1. Implementação de Cache: Adicionar cache de respostas para melhorar performance
  2. Documentação de API: Integrar Swagger/OpenAPI para documentação automática
  3. Versionamento de API: Implementar estratégia de versionamento para evolução segura
  4. Analytics: Coletar métricas de uso para insights de negócio
  5. Service Discovery: Integrar com ferramentas de service discovery para roteamento dinâmico