🔗

APIs REST

🧑‍🍳 Cocinero

Comunicación entre sistemas

REST APIs permiten que aplicaciones se comuniquen usando HTTP.


Métodos HTTP

MétodoAcciónEjemplo
GETObtener datosListar usuarios
POSTCrear nuevoCrear usuario
PUTActualizar todoActualizar perfil
PATCHActualizar parcialCambiar email
DELETEEliminarBorrar usuario

Estructura de URL

GET    /api/users          # Listar todos
GET    /api/users/123      # Obtener uno
POST   /api/users          # Crear
PUT    /api/users/123      # Actualizar
DELETE /api/users/123      # Eliminar

Fetch API

// GET
const res = await fetch('/api/users')
const users = await res.json()

// POST
const res = await fetch('/api/users', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ nombre: 'Ana', email: 'ana@email.com' })
})

// DELETE
await fetch('/api/users/123', { method: 'DELETE' })

Códigos de respuesta

CódigoSignificado
200OK
201Creado
400Error del cliente
401No autorizado
404No encontrado
500Error del servidor

Headers comunes

const headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer tu-token',
  'Accept': 'application/json'
}

Manejo de errores

async function fetchData() {
  const res = await fetch('/api/data')

  if (!res.ok) {
    throw new Error(`Error: ${res.status}`)
  }

  return res.json()
}

🔐 APIs para Fintech: Seguridad Obligatoria

Las APIs que manejan datos financieros tienen requisitos especiales de seguridad.

Headers de Seguridad Obligatorios

// Headers que TODA API financiera debe incluir
const securityHeaders = {
  'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
  'X-Content-Type-Options': 'nosniff',
  'X-Frame-Options': 'DENY',
  'X-XSS-Protection': '1; mode=block',
  'X-Request-ID': crypto.randomUUID(), // Trazabilidad
  'Cache-Control': 'no-store', // No cachear datos sensibles
}

Autenticación para Open Banking

MétodoUsoCuándo
OAuth 2.0 + PKCEApps móvilesConexión con bancos
mTLS (mutual TLS)Server-to-serverAPIs interbancarias
API Keys + HMACWebhooksVerificar origen
JWT con rotaciónSesionesUsuarios finales

Logging para Auditoría

En fintech, "no logueamos eso" no es respuesta aceptable ante un regulador.

// Middleware de auditoría
const auditMiddleware = (req, res, next) => {
  const auditLog = {
    requestId: req.headers['x-request-id'] || crypto.randomUUID(),
    timestamp: new Date().toISOString(),
    method: req.method,
    path: req.path,
    userId: req.user?.id,
    ip: req.ip,
    userAgent: req.headers['user-agent'],
  }

  // Log al inicio
  logger.info('API_REQUEST', auditLog)

  // Log al finalizar (con duración)
  res.on('finish', () => {
    logger.info('API_RESPONSE', {
      ...auditLog,
      statusCode: res.statusCode,
      duration: Date.now() - startTime
    })
  })

  next()
}

Rate Limiting por Endpoint

const rateLimits = {
  '/api/login':     { limit: 5,  window: '1m' },  // Anti brute-force
  '/api/transfer':  { limit: 10, window: '1h' },  // Límite fraude
  '/api/balance':   { limit: 60, window: '1m' },  // Uso normal
  '/api/verify':    { limit: 3,  window: '1d' },  // APIs costosas (KYC)
}

Practica

API REST con Express


Enlaces útiles