POST sin INSERT en MuleSoft: patrones para integraciones sin persistencia

Hay un reflejo casi automático cuando alguien empieza con MuleSoft: «esto es un POST, así que hace un INSERT en la base de datos». A veces es así. Pero muchos de los POST más interesantes en integración no persisten nada directamente — orquestan, validan, transforman o disparan procesos en otros sistemas. Entender esta diferencia es clave para diseñar bien la capa de proceso.

Por qué asumir «POST = INSERT» te lleva a diseños frágiles

El verbo HTTP POST significa, en el estándar REST, «crear un recurso o procesar una acción que no es idempotente» — no significa «escribir una fila en una tabla». Si diseñas cada POST asumiendo que termina en un INSERT, te encuentras con problemas en escenarios muy comunes:

  • Un POST que valida y orquesta una operación entre dos sistemas externos, sin base de datos propia de por medio.
  • Un POST que dispara un proceso asíncrono (una cola, un evento) y responde antes de que la persistencia real ocurra en otro componente.
  • Un POST que agrega o transforma datos de múltiples fuentes para devolver un resultado calculado, sin guardar nada.

Patrón 1: orquestación pura sin persistencia propia

Ejemplo: un endpoint POST /flights/search-availability que recibe criterios de búsqueda, llama a dos sistemas externos (inventario de vuelos y precios dinámicos), combina la respuesta y la devuelve. No hay ningún INSERT — el POST se usa porque el payload de entrada es complejo (no cabe bien en query params) y porque la operación combina múltiples llamadas, no porque haya que guardar algo.

POST /flights/search-availability
Body: { origin, destination, date, passengers }
→ ib-p-flights orquesta:
    1. Llama a ib-s-inventory (sistema de vuelos)
    2. Llama a ib-s-pricing (sistema de precios)
    3. Combina y filtra resultados
→ Devuelve resultado combinado, sin persistir nada

Patrón 2: disparar un proceso asíncrono

Ejemplo: POST /orders/submit que valida el pedido, publica un mensaje en una cola (VM, Anypoint MQ, o similar) y responde 202 Accepted de inmediato. La persistencia real ocurre en un consumidor de la cola, que puede estar en otro flujo o incluso otro proyecto Mule por completo.

Aquí el error común es hacer que el flujo del POST espere de forma síncrona a que la persistencia termine — eso acopla el tiempo de respuesta del endpoint a la velocidad del sistema de destino, cuando el propio diseño ya asumía que podían desacoplarse.

Patrón 3: validación como resultado final

No todos los POST de validación terminan en un guardado. Un endpoint POST /discount-codes/validate puede recibir un código de descuento, consultar reglas de negocio (posiblemente combinando varias fuentes) y devolver simplemente si es válido y su valor — sin escribir nada en ningún sitio. El «recurso creado» es, en realidad, un resultado de validación, no una fila nueva.

Cómo decidir si tu POST necesita persistencia o no

Antes de escribir el flujo, pregúntate:

  1. ¿El resultado de esta operación necesita sobrevivir a la petición? Si no, no necesitas INSERT — necesitas orquestación o cálculo.
  2. ¿Quién es el dueño real del dato? Si el dato vive en un sistema externo (otro Mule, un ERP, un tercero), tu POST probablemente debe llamar a ese sistema, no duplicar su persistencia.
  3. ¿La operación es síncrona o puede ser asíncrona? Si puede ser asíncrona, considera el patrón de cola en vez de bloquear la respuesta esperando persistencia.

Dónde encaja esto en la arquitectura de capas

Este tipo de decisiones vive naturalmente en la capa de proceso (ib-p), que ya vimos en detalle en nuestro post sobre la arquitectura de 3 capas del proyecto American Flights. La capa de proceso es exactamente donde se decide si una operación orquesta, transforma o dispara algo — la capa de sistema (ib-s) queda libre de tener que «saber» si el POST que la originó terminará persistiendo algo o no.

Por qué esto también aparece en el examen

Los escenarios de MCD-L1 that presentan un caso de negocio y preguntan qué componente usarías, con frecuencia incluyen esta trampa: dar por hecho que porque el verbo es POST, la solución pasa por un conector de base de datos. Reconocer cuándo no es así es parte de lo que separa una respuesta correcta de una automática.

En el curso de MuleSoft Developer trabajamos estos patrones dentro del proyecto American Flights, con casos reales donde el POST orquesta en vez de simplemente insertar, para que la distinción quede clara en código, no solo en teoría.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *