Symfony Bundle · PHP 8.2+ · Packagist

Deja de escribir el mismo cliente HTTP una y otra vez

Un motor de integración para Symfony que centraliza tus APIs externas bajo contratos claros.

¡Copiado! composer require carlosgude/integration-engine

Cada integración acaba siendo un caso aislado

Diferentes formatos, autenticaciones inconsistentes, lógica de cache duplicada. El código se fragmenta y cada nueva API es empezar de cero.

Auth duplicada

Tokens y cache reimplementados en cada integración.

Sin contrato común

Cada cliente HTTP tiene su propia estructura.

Difícil de testear

HTTP acoplado al dominio. Imposible aislar.

Sin consistencia

Cada desarrollador resuelve el problema a su manera.

Cero visibilidad

Sin trazabilidad, sin logs unificados, sin contexto compartido.

Un flujo único para todas tus integraciones

Un único punto de entrada. Cada paso tiene una responsabilidad clara.

Registry
IntegrationEngine
Action
Auth
HTTP
Mapper
Response DTO

Auth dinámica con cache

OAuth, sesiones, API keys. El engine los resuelve y cachea automáticamente.

Context de path

/orders/{id} se resuelve en tiempo de llamada. Fallo explícito si falta parámetro.

Headers en tres capas

YAML → auth → capa de llamada. Cada capa sobreescribe a la anterior. Sin magia.

Respuestas tipadas

Cada acción define su propio Response DTO con contrato garantizado.

Totalmente extensible

Client, cache y config source sustituibles con una línea en YAML.

Scaffolding incluido

make:integration genera Mapper, Response DTO y YAML en segundos.

Una línea. Siempre la misma.

Sin strings mágicos — todo a través de contratos.

// Sin autenticación
$registry->get(
    AcmeIntegration::NAME
)->send(
    GetUsersAction::getName()
);
// Con parámetros de ruta — /users/{id}
$registry->get(
    AcmeIntegration::NAME
)->send(
    GetUserAction::getName(),
    context: DefaultActionContext::create(['id' => 42])
);
// Con body y headers personalizados
$registry->get(
    AcmeIntegration::NAME
)->send(
    CreateOrderAction::getName(),
    body:    $body,
    headers: new CorrelationHeaders($id)
);

El bundle propone. No impone.

Tres niveles que emergen solos. Usa los que necesites.

ClaseResponsabilidadAlcance
CreateChargeActionSolo declara el método, el path y el DTO de respuesta. Sin lógica HTTP.Acción concreta
StripeActionAuth, path base y headers comunes de Stripe. Reutilizado por todas sus acciones.Integración
AbstractActionContrato base que provee el engine. Extensible sin tocar el core.Bundle

El comando make:integration crea el config, las clases y el YAML en un solo paso.

¿Tienes alguna pregunta?

Escríbenos y te respondemos lo antes posible.

Empieza en un comando

Sin boilerplate. Sin decisiones arbitrarias. Solo tu lógica de negocio.