integration-patterns-mastery
Integration Patterns Mastery
Sistema para disenar y explicar integraciones robustas en produccion.
Workflow Principal
1. Identificar necesidad
| Usuario dice... | Accion |
|---|---|
| "Disenar integracion" | Ir a Decision Framework (abajo) |
| "Webhooks seguros" | Ver webhook-security.md |
| "Retry patterns" | Ver retry-patterns.md |
| "Sincronizar datos" | Ver sync-strategies.md |
| "Integrar Stripe/pagos" | Ver payment-edge-cases.md |
| "Explicar mi integracion" | Usar ejemplos de tu experiencia |
2. Decision Framework: Disenar Integracion
Paso 1: Clasificar tipo de integracion
PUSH (webhooks, eventos)
→ API externa notifica a tu sistema
→ Necesitas: endpoint seguro, idempotencia, retry handling
PULL (polling, fetch)
→ Tu sistema consulta API externa
→ Necesitas: scheduler, rate limiting, cache
BIDIRECCIONAL (sync)
→ Datos fluyen en ambas direcciones
→ Necesitas: conflict resolution, reconciliacion
Paso 2: Definir garantias necesarias
At-least-once: mensaje llega 1+ veces (tolera duplicados)
→ Implementar: idempotencia en handler
At-most-once: mensaje llega 0 o 1 vez (puede perder)
→ Implementar: solo si perdida es aceptable
Exactly-once: mensaje llega exactamente 1 vez
→ Implementar: transacciones + deduplicacion (complejo)
Paso 3: Error handling strategy
TRANSIENT ERRORS (timeout, 503)
→ Retry con exponential backoff
PERMANENT ERRORS (400, 401)
→ No retry, log + alerta
PARTIAL FAILURES
→ Dead letter queue para revision manual
3. Patrones Core
Webhook Handler Seguro
app.post('/webhooks/stripe', async (req, res) => {
// 1. VERIFICAR FIRMA (siempre primero)
const sig = req.headers['stripe-signature'];
let event;
try {
event = stripe.webhooks.constructEvent(req.rawBody, sig, SECRET);
} catch (err) {
return res.status(400).send('Invalid signature');
}
// 2. IDEMPOTENCIA (evitar procesar dos veces)
const processed = await db('webhook_events')
.where({ event_id: event.id }).first();
if (processed) {
return res.json({ status: 'already_processed' });
}
// 3. PROCESAR
try {
await handleEvent(event);
await db('webhook_events').insert({ event_id: event.id });
res.json({ received: true });
} catch (err) {
// 4. RETRY LOGIC (devolver 500 para que reintenten)
console.error('Webhook processing failed', err);
res.status(500).send('Processing failed');
}
});
Retry con Exponential Backoff
const retryWithBackoff = async (fn, options = {}) => {
const { maxRetries = 5, baseDelay = 1000 } = options;
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await fn();
} catch (error) {
if (!isRetryable(error) || attempt === maxRetries - 1) {
throw error;
}
const delay = baseDelay * Math.pow(2, attempt) + Math.random() * 1000;
await sleep(delay);
}
}
};
const isRetryable = (error) => {
// Retry: timeouts, 5xx, network errors
// No retry: 4xx (except 429)
if (error.code === 'ETIMEDOUT') return true;
if (error.status >= 500) return true;
if (error.status === 429) return true;
return false;
};
Dead Letter Queue
// Cuando algo falla permanentemente
const handleFailedJob = async (job, error) => {
await db('dead_letter_queue').insert({
job_type: job.type,
payload: JSON.stringify(job.data),
error: error.message,
failed_at: new Date(),
retry_count: job.attemptsMade
});
// Notificar para revision manual
await sendAlert({
channel: 'integrations',
message: `Job ${job.id} failed permanently: ${error.message}`
});
};
4. Tu Experiencia: Scripts de Respuesta
iCal Sync con OTAs:
"El challenge principal fue que iCal es un protocolo muy basico - solo
tiene bloques de tiempo sin estados ni IDs unicos.
Mi solucion tiene 4 componentes:
1. SYNC ENGINE: Polling cada 5 minutos, parsea iCal
2. RECONCILIADOR: Compara con estado interno, genera diff
3. CONFLICT RESOLVER: Aplica reglas de prioridad
4. RETRY HANDLER: Exponential backoff para failures
El resultado: 99% de syncs automaticos, cero overbookings en 18 meses."
Stripe Integration:
"Implemente integracion completa con Stripe incluyendo:
- Customer creation y management
- PaymentIntents para one-time payments
- Subscriptions con lifecycle completo
- Webhook handlers para todos los eventos criticos
Los edge cases mas importantes que manejo:
- Pagos fallidos con dunning flow
- Disputes y chargebacks
- Currency handling para Colombia (COP sin centavos)
- Idempotencia para evitar cobros duplicados"
5. Checklist de Integracion Robusta
SEGURIDAD
[ ] Verificacion de firmas en webhooks
[ ] Secrets en variables de entorno
[ ] HTTPS para todos los endpoints
[ ] Rate limiting en endpoints publicos
RELIABILITY
[ ] Retry con exponential backoff
[ ] Dead letter queue para failures
[ ] Timeouts configurados
[ ] Circuit breaker si aplica
IDEMPOTENCIA
[ ] Unique key para cada operacion
[ ] Check antes de procesar
[ ] Respuesta consistente para duplicados
OBSERVABILIDAD
[ ] Logs estructurados
[ ] Metricas de latencia y errores
[ ] Alertas para failures
[ ] Dashboard de health
Referencias
| Archivo | Contenido | Cuando usar |
|---|---|---|
| webhook-security.md | Firmas, replay attacks, idempotencia | Implementar webhooks |
| retry-patterns.md | Backoff, jitter, circuit breaker | Manejar failures |
| sync-strategies.md | Push, pull, bidireccional, reconciliacion | Sincronizar datos |
| payment-edge-cases.md | Stripe, disputes, refunds, currencies | Integrar pagos |
More from founderjourney/claude-skills
superpowers
Structured software development framework for coding agents. Composable skills enforcing planning, testing, and systematic execution. Prevents code-first chaos.
136firecrawl
Web scraping, search, and data extraction using Firecrawl API. Use when users need to fetch web content, discover URLs on sites, search the web, or extract structured data from pages.
91obsidian-skills
Agent skills for creating and editing Obsidian-compatible files. Supports Obsidian Flavored Markdown, Bases (.base), and JSON Canvas (.canvas) formats.
86saas-business-logic-analyst
|
62seo-geo-skills
Comprehensive SEO and GEO (Generative Engine Optimization) skills covering research, building, optimization, and monitoring phases. 16 specialized skills for search optimization.
52saas-architecture-deep-dive
Dominio de arquitectura SaaS para Senior Full-Stack Developer. Usar cuando el usuario necesite explicar arquitectura SaaS, multi-tenancy, disenar sistemas escalables, evaluar trade-offs arquitectonicos, o preparar respuestas sobre diseño de sistemas. Activa con palabras como SaaS, multi-tenant, arquitectura, escalabilidad, tenant isolation, subscription, billing, feature flags, scaling. Especializado en plataformas como HostelOS y Digitaliza.
45