O que é um API Gateway
Um API Gateway é um componente que funciona como um ponto de entrada único entre clientes e serviços de backend. Ele gerencia centralmente preocupações transversais como autenticação, limitação de taxa e roteamento.
flowchart TB
Client["Cliente"] --> Gateway["API Gateway<br/>・Autenticação<br/>・Limitação de taxa<br/>・Roteamento<br/>・Logs"]
Gateway --> SA["Service A"]
Gateway --> SB["Service B"]
Gateway --> SC["Service C"]
Principais Funcionalidades
1. Roteamento
Encaminha requisições para os serviços de backend apropriados.
# Exemplo de configuração do Kong
routes:
- name: user-service
paths:
- /api/users
service: user-service
- name: order-service
paths:
- /api/orders
service: order-service
2. Autenticação e Autorização
sequenceDiagram
participant C as Cliente
participant G as Gateway
participant Auth as Serviço de Autenticação
participant B as Serviço de Backend
C->>G: Requisição
G->>Auth: Validação do token
Auth-->>G: Resultado da validação
G->>B: Encaminhamento da requisição
B-->>G: Resposta
G-->>C: Resposta
# Exemplo de configuração de validação JWT
plugins:
- name: jwt
config:
secret_is_base64: true
claims_to_verify:
- exp
3. Limitação de Taxa
plugins:
- name: rate-limiting
config:
minute: 100
policy: local
fault_tolerant: true
4. Transformação de Requisição/Resposta
// Adição de header de requisição
request.headers['X-Request-ID'] = generateUUID();
// Transformação de resposta
response.body = {
data: response.body,
meta: {
requestId: request.headers['X-Request-ID'],
timestamp: new Date().toISOString()
}
};
5. Cache
plugins:
- name: proxy-cache
config:
content_type:
- application/json
cache_ttl: 300
strategy: memory
6. Logging e Monitoramento
plugins:
- name: http-log
config:
http_endpoint: http://logging-service/logs
method: POST
content_type: application/json
Padrão BFF (Backend for Frontend)
Prepare API Gateways otimizados para cada tipo de cliente.
flowchart LR
Web["Web App"] --> BFFWeb["BFF (Web)"]
Mobile["Mobile App"] --> BFFMobile["BFF (Mobile)"]
IoT["IoT"] --> BFFIoT["BFF (IoT)"]
BFFWeb --> SA["Service A"]
BFFWeb --> SB["Service B"]
BFFMobile --> SA
BFFMobile --> SB
BFFIoT --> SA
BFFIoT --> SB
Vantagens do BFF
- Respostas otimizadas para o cliente
- Oculta a complexidade do backend dos clientes
- Deploy independente para cada cliente
Principais API Gateways
| Produto | Características |
|---|---|
| Kong | Rico em plugins, extensão Lua |
| AWS API Gateway | Serverless, integração com Lambda |
| Envoy | Alto desempenho, service mesh |
| NGINX Plus | Alto desempenho, ampla experiência |
| Traefik | Cloud native, configuração automática |
| Tyk | Open source, suporte a GraphQL |
Kong vs Envoy
| Aspecto | Kong | Envoy |
|---|---|---|
| Uso | Especializado em API Gateway | Inclui service mesh |
| Método de extensão | Plugins Lua | C++/Lua/WASM |
| Configuração | Admin API, declarativo | xDS API, yaml |
| Banco de dados | PostgreSQL/Cassandra | Nenhum (stateless) |
| Curva de aprendizado | Baixa | Alta |
API Composition
Agrega dados de múltiplos serviços e retorna.
// Agregação de dados no API Gateway
async function getUserProfile(userId) {
const [user, orders, reviews] = await Promise.all([
userService.getUser(userId),
orderService.getOrders(userId),
reviewService.getReviews(userId)
]);
return {
...user,
recentOrders: orders.slice(0, 5),
reviewCount: reviews.length
};
}
Funcionalidades de Edge
Terminação SSL/TLS
flowchart LR
Client["Cliente"] -->|HTTPS| Gateway["Gateway<br/>🔐 Gerenciamento de certificados"]
Gateway -->|HTTP| Internal["Serviços internos"]
Validação de Requisições
plugins:
- name: request-validator
config:
body_schema: |
{
"type": "object",
"required": ["email", "password"],
"properties": {
"email": {"type": "string", "format": "email"},
"password": {"type": "string", "minLength": 8}
}
}
Considerações de Design
Não se torne um ponto único de falha
flowchart TB
LB["Load Balancer"] --> G1["Gateway 1"]
LB --> G2["Gateway 2"]
Responsabilidades do Gateway
Responsabilidades apropriadas:
- ✓ Preocupações transversais (autenticação, logs, limitação de taxa)
- ✓ Conversão de protocolo
- ✓ Roteamento de requisições
Responsabilidades a evitar:
- ✗ Lógica de negócios
- ✗ Transformações de dados complexas
- ✗ Manutenção de estado
Resumo
O API Gateway é um componente importante na arquitetura de microsserviços que serve como ponte entre clientes e serviços. Ao gerenciar centralmente preocupações transversais como autenticação, limitação de taxa e roteamento, cada serviço pode se concentrar na lógica de negócios. É importante escolher o produto apropriado e projetá-lo para não se tornar um ponto único de falha.
← Voltar para a lista