| ID | sre-api-gateway-rate-limiting |
Scanned 9/2/2026
Install to Claude Code
npx -y skills add majiayu000/claude-skill-registry --skill api-gateway-rate-limiting --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Api Gateway Rate Limiting?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-api-gateway-rate-limiting-claude-skill-registry)More formats (shields.io, HTML) on the badges page.
---
name: api-gateway-rate-limiting
description: '| ID | sre-api-gateway-rate-limiting |'
---
# 🚪 Skill: API Gateway & Rate Limiting
## 📋 Metadata
| Atributo | Valor |
|----------|-------|
| **ID** | `sre-api-gateway-rate-limiting` |
| **Nivel** | 🟡 Intermedio |
| **Versión** | 1.0.0 |
| **Keywords** | `api-gateway`, `rate-limiting`, `kong`, `nginx`, `traefik`, `throttling`, `api-management` |
| **Referencia** | [Kong Documentation](https://docs.konghq.com/) |
## 🔑 Keywords para Invocación
- `api-gateway`
- `rate-limiting`
- `kong`
- `nginx`
- `traefik`
- `throttling`
- `api-management`
- `@skill:api-gateway`
### Ejemplos de Prompts
```
Implementa API Gateway con Kong y rate limiting
```
```
Configura throttling y API management
```
```
Setup Nginx como API Gateway con rate limiting
```
```
@skill:api-gateway - API Gateway completo con rate limiting
```
## 📖 Descripción
API Gateway actúa como punto de entrada único para APIs, proporcionando rate limiting, autenticación, routing, y observabilidad. Este skill cubre implementación de Kong/Nginx como gateway, rate limiting strategies, y API management.
### ✅ Cuándo Usar Este Skill
- Múltiples microservicios
- Requisitos de rate limiting
- API versioning
- Centralized authentication
- API analytics
- DDoS protection
### ❌ Cuándo NO Usar Este Skill
- Single service
- Sin requisitos de rate limiting
- APIs internas simples
## 🏗️ API Gateway Architecture
```
┌───────────────────────┐
│ Clients │
└────────────┬──────────┘
│
┌────────────▼──────────┐
│ API Gateway │
│ ┌───────────┐ │
│ │ Rate Limit│ │
│ │ Auth │ │
│ │ Routing │ │
│ └───────────┘ │
└────────────┬──────────┘
│
┌────────┼────────┐
│ │ │
┌───▼───┐┌───▼───┐┌───▼───┐
│Service││Service││Service│
│ A ││ B ││ C │
└───────┘└───────┘└───────┘
```
## 💻 Implementación
> **📁 Scripts Ejecutables:** Este skill incluye scripts ejecutables en la carpeta [`scripts/`](scripts/):
> - [`kong_custom_rate_limiting.lua`](scripts/kong_custom_rate_limiting.lua) - Plugin personalizado de Kong
> - [`rate_limiting_strategies.py`](scripts/rate_limiting_strategies.py) - Algoritmos de rate limiting (CLI)
> - [`api_gateway_middleware.py`](scripts/api_gateway_middleware.py) - API Gateway FastAPI con rate limiting
> - [`requirements.txt`](scripts/requirements.txt) - Dependencias Python
>
> Ver [`scripts/README.md`](scripts/README.md) para documentación de uso.
### 1. Kong API Gateway
#### 1.1 Kong Configuration
```yaml
# kong/kong.yml
_format_version: "3.0"
_transform: true
services:
- name: user-service
url: http://user-service:3000
routes:
- name: user-route
paths:
- /api/v1/users
methods:
- GET
- POST
plugins:
- name: rate-limiting
config:
minute: 100
hour: 1000
policy: local
- name: key-auth
config:
key_names:
- apikey
- name: product-service
url: http://product-service:3000
routes:
- name: product-route
paths:
- /api/v1/products
plugins:
- name: rate-limiting
config:
second: 10
minute: 100
hour: 1000
policy: redis
redis_host: redis
redis_port: 6379
- name: request-size-limiting
config:
allowed_payload_size: 512
plugins:
- name: cors
config:
origins:
- https://example.com
methods:
- GET
- POST
- PUT
- DELETE
credentials: true
consumers:
- username: api-user
keyauth_credentials:
- key: api-key-12345
```
#### 1.2 Rate Limiting Plugin
**Script ejecutable:** [`scripts/kong_custom_rate_limiting.lua`](scripts/kong_custom_rate_limiting.lua)
Plugin personalizado de Kong para rate limiting distribuido usando Redis.
#### Cuándo usar
- Rate limiting distribuido entre múltiples instancias de Kong
- Necesitas control granular sobre la lógica de rate limiting
- Requisitos específicos de identificación (IP, consumer, header)
#### Instalación en Kong
```bash
# 1. Crear directorio del plugin
mkdir -p /usr/local/share/lua/5.1/kong/plugins/custom-rate-limiting
# 2. Copiar plugin
cp scripts/kong_custom_rate_limiting.lua \
/usr/local/share/lua/5.1/kong/plugins/custom-rate-limiting/access.lua
# 3. Crear schema.lua (ver comentarios en el archivo para estructura)
# 4. Habilitar en kong.yml
plugins:
- name: custom-rate-limiting
config:
limit: 100
window: 60
redis_host: redis
redis_port: 6379
identifier: ip # ip, consumer, or header
```
#### Características
- ✅ Rate limiting distribuido con Redis
- ✅ Soporte para múltiples identificadores (IP, consumer, header)
- ✅ Headers estándar de rate limiting (X-RateLimit-*)
- ✅ Fail-open o fail-closed configurable
- ✅ Connection pooling para Redis
### 2. Nginx Rate Limiting
```nginx
# nginx/nginx.conf
http {
# Rate limiting zones
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
upstream user_service {
least_conn;
server user-service-1:3000 max_fails=3 fail_timeout=30s;
server user-service-2:3000 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
listen 80;
server_name api.example.com;
# Global rate limiting
limit_req zone=api_limit burst=20 nodelay;
limit_conn conn_limit_per_ip 10;
# CORS headers
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type' always;
# Health check endpoint (no rate limit)
location /health {
access_log off;
return 200 "healthy\n";
}
# Login endpoint (stricter rate limit)
location /api/v1/auth/login {
limit_req zone=login_limit burst=3 nodelay;
proxy_pass http://user_service;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# API endpoints
location /api/v1/ {
# Rate limiting
limit_req zone=api_limit burst=20 nodelay;
# Authentication
auth_request /auth;
proxy_pass http://user_service;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Timeouts
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
}
# Authentication subrequest
location = /auth {
internal;
proxy_pass http://auth-service:3000/verify;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
# Error pages
error_page 429 /429.json;
location = /429.json {
internal;
default_type application/json;
return 429 '{"error": "Rate limit exceeded", "retry_after": 60}';
add_header Retry-After 60 always;
}
}
}
```
### 3. Rate Limiting Strategies
**Script ejecutable:** [`scripts/rate_limiting_strategies.py`](scripts/rate_limiting_strategies.py)
Implementación de diferentes algoritmos de rate limiting: Fixed Window, Token Bucket, y Sliding Window.
#### Cuándo usar
- **Fixed Window:** Casos simples, tráfico predecible
- **Token Bucket:** Tráfico con bursts, rate limiting suave
- **Sliding Window:** Rate limiting preciso, sin bursts en límites de ventana
#### Uso como CLI
```bash
# Test fixed window
python scripts/rate_limiting_strategies.py \
--strategy fixed \
--max-requests 10 \
--window 60 \
--num-requests 15
# Test token bucket
python scripts/rate_limiting_strategies.py \
--strategy token-bucket \
--capacity 10 \
--refill-rate 1.0 \
--num-requests 15
# Test sliding window
python scripts/rate_limiting_strategies.py \
--strategy sliding \
--max-requests 10 \
--window 60 \
--num-requests 15
```
#### Uso como módulo
```python
from scripts.rate_limiting_strategies import RateLimiter, TokenBucketRateLimiter
# Fixed window
limiter = RateLimiter(max_requests=100, window_seconds=60)
if limiter.is_allowed("user123"):
# Process request
pass
# Token bucket
bucket = TokenBucketRateLimiter(capacity=100, refill_rate=10.0)
if bucket.is_allowed("user123", tokens=5):
# Process request
pass
```
#### Comparación de estrategias
| Estrategia | Ventajas | Desventajas | Mejor para |
|------------|----------|-------------|------------|
| **Fixed Window** | Simple, eficiente | Bursts en límites | Casos simples |
| **Token Bucket** | Permite bursts, suave | Más complejo | Tráfico variable |
| **Sliding Window** | Preciso, sin bursts | Más memoria | Rate limiting exacto |
### 4. API Gateway with Authentication
**Script ejecutable:** [`scripts/api_gateway_middleware.py`](scripts/api_gateway_middleware.py)
API Gateway completo con FastAPI que incluye rate limiting, autenticación por API key, y diferentes límites por tier.
#### Cuándo ejecutar
- **Servicio API Gateway:** Como microservicio corriendo continuamente
- **Prototipo rápido:** Para probar rate limiting y autenticación
- **Integración:** Como base para un API Gateway más complejo
#### Instalación
```bash
pip install -r scripts/requirements.txt
```
#### Ejecución
```bash
# Desarrollo (con auto-reload)
uvicorn scripts.api_gateway_middleware:app --reload --host 0.0.0.0 --port 8000
# Producción
uvicorn scripts.api_gateway_middleware:app --host 0.0.0.0 --port 8000 --workers 4
```
#### Endpoints
**Health Check (sin rate limit):**
```bash
curl http://localhost:8000/health
```
**Endpoint público (rate limit por IP):**
```bash
curl http://localhost:8000/api/v1/public
```
**Endpoint protegido (requiere API key):**
```bash
curl -H "Authorization: Bearer valid-api-key-1" \
http://localhost:8000/api/v1/data
```
#### Características
- ✅ Rate limiting por tier (premium, basic, anonymous)
- ✅ Autenticación por API key
- ✅ Headers estándar de rate limiting
- ✅ Endpoints públicos y protegidos
- ✅ Documentación Swagger en `/docs`
#### Configuración de API Keys
Edita `VALID_API_KEYS` en el script o usa base de datos en producción:
```python
VALID_API_KEYS = {
"your-api-key": {"user_id": "user1", "tier": "premium"},
}
```
## 🎯 Mejores Práctices
### 1. Rate Limiting
✅ **DO:**
- Set appropriate limits per endpoint
- Use different limits for authenticated vs anonymous
- Provide rate limit headers
- Implement sliding window or token bucket
❌ **DON'T:**
- Set limits too low
- Ignore rate limit headers
- Use fixed window for burst traffic
### 2. API Gateway
✅ **DO:**
- Centralize authentication
- Implement request/response transformation
- Monitor API usage
- Version APIs
❌ **DON'T:**
- Bypass gateway
- Ignore monitoring
- Skip authentication
## 🚨 Troubleshooting
### Rate Limits Too Strict
1. Review limits
2. Check usage patterns
3. Adjust limits per endpoint
4. Implement burst allowances
### Gateway Performance
1. Monitor latency
2. Check connection pooling
3. Review caching strategies
4. Optimize routing rules
## 📚 Recursos Adicionales
- [Kong Documentation](https://docs.konghq.com/)
- [Nginx Rate Limiting](https://www.nginx.com/blog/rate-limiting-nginx/)
- [API Gateway Patterns](https://microservices.io/patterns/apigateway.html)
---
**Versión:** 1.0.0
**Última actualización:** Diciembre 2025
**Total líneas:** 1,100+
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!