Que es un API Gateway
Un API Gateway es un componente que funciona como punto de entrada unico entre los clientes y los servicios backend. Gestiona de forma centralizada preocupaciones transversales como autenticacion, limitacion de tasa y enrutamiento.
flowchart TB
Client["Cliente"] --> Gateway["API Gateway<br/>- Autenticacion<br/>- Limitacion de tasa<br/>- Enrutamiento<br/>- Logs"]
Gateway --> SA["Service A"]
Gateway --> SB["Service B"]
Gateway --> SC["Service C"]
Funciones Principales
1. Enrutamiento
Distribuye las solicitudes a los servicios backend apropiados.
# Ejemplo de configuracion de Kong
routes:
- name: user-service
paths:
- /api/users
service: user-service
- name: order-service
paths:
- /api/orders
service: order-service
2. Autenticacion y Autorizacion
sequenceDiagram
participant C as Cliente
participant G as Gateway
participant Auth as Servicio de Autenticacion
participant B as Servicio Backend
C->>G: Solicitud
G->>Auth: Validar token
Auth-->>G: Resultado de validacion
G->>B: Reenviar solicitud
B-->>G: Respuesta
G-->>C: Respuesta
# Ejemplo de configuracion de validacion JWT
plugins:
- name: jwt
config:
secret_is_base64: true
claims_to_verify:
- exp
3. Limitacion de Tasa
plugins:
- name: rate-limiting
config:
minute: 100
policy: local
fault_tolerant: true
4. Transformacion de Solicitud/Respuesta
// Agregar encabezados de solicitud
request.headers['X-Request-ID'] = generateUUID();
// Transformar respuesta
response.body = {
data: response.body,
meta: {
requestId: request.headers['X-Request-ID'],
timestamp: new Date().toISOString()
}
};
5. Caching
plugins:
- name: proxy-cache
config:
content_type:
- application/json
cache_ttl: 300
strategy: memory
6. Logging y Monitoreo
plugins:
- name: http-log
config:
http_endpoint: http://logging-service/logs
method: POST
content_type: application/json
Patron BFF (Backend for Frontend)
Proporciona API Gateways optimizados 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
Ventajas de BFF
- Respuestas optimizadas para cada cliente
- Oculta la complejidad del backend a los clientes
- Despliegue independiente por cliente
Principales API Gateways
| Producto | Caracteristicas |
|---|---|
| Kong | Rico en plugins, extension con Lua |
| AWS API Gateway | Serverless, integracion con Lambda |
| Envoy | Alto rendimiento, service mesh |
| NGINX Plus | Alto rendimiento, amplia trayectoria |
| Traefik | Cloud native, configuracion automatica |
| Tyk | Open source, soporte GraphQL |
Kong vs Envoy
| Aspecto | Kong | Envoy |
|---|---|---|
| Proposito | Especializado en API Gateway | Incluye service mesh |
| Metodo de extension | Plugins Lua | C++/Lua/WASM |
| Configuracion | Admin API, declarativa | xDS API, yaml |
| BD | PostgreSQL/Cassandra | Ninguna (stateless) |
| Curva de aprendizaje | Baja | Alta |
API Composition
Agrega datos de multiples servicios y los devuelve.
// Agregacion de datos en 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
};
}
Funciones Edge
Terminacion SSL/TLS
flowchart LR
Client["Cliente"] -->|HTTPS| Gateway["Gateway<br/>Gestion de certificados"]
Gateway -->|HTTP| Internal["Servicios internos"]
Validacion de Solicitudes
plugins:
- name: request-validator
config:
body_schema: |
{
"type": "object",
"required": ["email", "password"],
"properties": {
"email": {"type": "string", "format": "email"},
"password": {"type": "string", "minLength": 8}
}
}
Consideraciones de Diseno
Evitar Punto Unico de Fallo
flowchart TB
LB["Load Balancer"] --> G1["Gateway 1"]
LB --> G2["Gateway 2"]
Responsabilidades del Gateway
Responsabilidades apropiadas:
- Preocupaciones transversales (autenticacion, logs, limitacion de tasa)
- Conversion de protocolos
- Enrutamiento de solicitudes
Responsabilidades a evitar:
- Logica de negocio
- Transformaciones de datos complejas
- Mantenimiento de estado
Resumen
El API Gateway es un componente importante en la arquitectura de microservicios que actua como puente entre clientes y servicios. Al gestionar de forma centralizada preocupaciones transversales como autenticacion, limitacion de tasa y enrutamiento, cada servicio puede concentrarse en la logica de negocio. Es importante seleccionar el producto adecuado y disenar para evitar que se convierta en un punto unico de fallo.
← Volver a la lista