18. Integración con APIs y sistemas externos

18.1 Introducción

Muchas aplicaciones necesitan comunicarse con sistemas externos: pasarelas de pago, servicios de correo, proveedores de identidad, plataformas de facturación, servicios logísticos, APIs de mapas o sistemas de otras organizaciones.

Estas integraciones agregan riesgo porque parte del comportamiento queda fuera del control directo del equipo. El sistema externo puede cambiar, fallar, responder lento, rechazar datos o tener reglas propias.

En este tema veremos cómo pensar pruebas de integración con APIs y sistemas externos de manera segura, controlada y útil.

18.2 Qué diferencia a un sistema externo

Un sistema externo es una dependencia que no pertenece completamente al sistema que estamos desarrollando. Puede ser mantenido por otro equipo, otra empresa o una plataforma de terceros.

Esto implica que:

  • No siempre podemos controlar su disponibilidad.
  • No siempre podemos modificar sus datos.
  • Puede tener costos por uso.
  • Puede limitar la cantidad de llamadas.
  • Puede cambiar su contrato o sus políticas.
  • Puede tener ambientes separados, como sandbox y producción.
Probar una integración externa no significa depender siempre del sistema real. Significa verificar que nuestra aplicación se comporte correctamente frente al contrato y las respuestas esperadas.

18.3 Qué se debe probar

En una integración con un sistema externo, las pruebas pueden verificar:

  • Que la solicitud enviada tenga el formato correcto.
  • Que se usen URL, credenciales y encabezados adecuados.
  • Que la respuesta exitosa se interprete correctamente.
  • Que los errores conocidos se manejen de forma controlada.
  • Que los timeouts y reintentos no generen duplicados.
  • Que el estado interno de nuestra aplicación quede consistente.
  • Que no se ejecuten efectos reales peligrosos durante la prueba.

18.4 Contrato de la API externa

El contrato de una API externa define cómo debemos comunicarnos con ella. Puede estar documentado por el proveedor o expresado mediante ejemplos, especificaciones o SDKs.

Conviene revisar:

  • Método o tipo de operación.
  • Ruta o endpoint.
  • Campos obligatorios y opcionales.
  • Tipos y formatos de datos.
  • Encabezados requeridos.
  • Códigos de respuesta.
  • Estructura de errores.

Una prueba de integración debe confirmar que nuestra aplicación cumple ese contrato y puede interpretar las respuestas esperadas.

18.5 Autenticación y autorización

Muchas APIs externas requieren autenticación. Puede tratarse de tokens, claves de API, certificados, usuarios de servicio u otros mecanismos.

Las pruebas deben considerar:

  • Credenciales específicas para pruebas.
  • Permisos suficientes para la operación probada.
  • Credenciales inválidas o vencidas.
  • Errores de autorización diferenciados de errores de negocio.
  • Protección de secretos en logs y archivos.

Un error de autenticación puede parecer una falla funcional si la prueba no registra suficiente evidencia.

18.6 Ambientes sandbox

Muchos proveedores ofrecen un ambiente sandbox, es decir, un entorno de prueba separado de producción. Allí se pueden simular operaciones sin afectar datos reales.

Un sandbox es útil para:

  • Probar contratos con el proveedor real.
  • Validar credenciales de prueba.
  • Ejecutar operaciones sin costo real o con costo controlado.
  • Revisar respuestas típicas del proveedor.
  • Detectar diferencias entre nuestra implementación y la documentación.

Sin embargo, un sandbox también puede comportarse distinto de producción. Por eso sus limitaciones deben conocerse.

18.7 Simulaciones de servicios externos

En muchas pruebas de integración conviene reemplazar el sistema externo por una simulación controlada. Esto permite ejecutar casos de éxito, error, demora o respuesta inválida sin depender del proveedor real.

Una simulación puede ayudar a probar:

  • Respuesta exitosa.
  • Error de validación.
  • Credencial rechazada.
  • Timeout.
  • Respuesta incompleta.
  • Código de estado inesperado.

El riesgo es que la simulación quede desactualizada. Por eso debe mantenerse alineada con el contrato real.

18.8 Servicio real, sandbox o simulación

La elección depende del objetivo de la prueba. No existe una única respuesta correcta para todos los casos.

Opción Uso adecuado Cuidado
Servicio real Validar máxima compatibilidad en un ambiente controlado. Puede tener costos, riesgos y variabilidad.
Sandbox Probar integración contra proveedor sin afectar producción. Puede no reproducir todos los casos reales.
Simulación Controlar respuestas y ejecutar pruebas repetibles. Debe respetar el contrato actualizado.

18.9 Manejo de errores externos

Una integración externa debe manejar errores de forma clara. No basta con probar el camino exitoso.

Conviene probar qué ocurre cuando el proveedor:

  • Rechaza la solicitud por datos inválidos.
  • Rechaza la credencial.
  • No responde.
  • Responde con error temporal.
  • Devuelve un formato inesperado.
  • Indica que la operación quedó pendiente.

La prueba debe verificar que nuestra aplicación informe el problema y mantenga un estado interno coherente.

18.10 Timeouts y reintentos

Los sistemas externos pueden tardar en responder. La configuración de timeout y reintentos influye directamente en el comportamiento de la integración.

Una prueba de integración puede verificar:

  • Que el sistema no espere indefinidamente.
  • Que los reintentos tengan un límite.
  • Que no se dupliquen operaciones sensibles.
  • Que se registre evidencia del fallo.
  • Que la respuesta al usuario o al proceso sea adecuada.

Este punto es especialmente importante en pagos, reservas, creación de órdenes y cualquier operación con efectos externos.

18.11 Idempotencia en integraciones externas

Cuando una operación puede reintentarse, la idempotencia es clave. Repetir la misma solicitud no debería producir efectos duplicados si la operación representa la misma intención.

Ejemplos de problemas:

  • Cobrar dos veces un pago por reintento.
  • Crear dos reservas por una respuesta tardía.
  • Enviar varias notificaciones por el mismo evento.
  • Registrar dos facturas para la misma operación.

Las pruebas deben verificar cómo se usan identificadores de operación, claves de idempotencia o controles internos para evitar duplicados.

18.12 Efectos secundarios

Una llamada a un sistema externo puede producir efectos secundarios reales: enviar un correo, cobrar dinero, reservar stock, emitir una factura o crear un expediente.

En pruebas de integración, debemos evitar efectos peligrosos:

  • Usar cuentas, correos y teléfonos de prueba.
  • Trabajar con sandbox cuando exista.
  • Simular proveedores para casos repetibles.
  • Desactivar envíos reales si no forman parte del objetivo.
  • Confirmar que las credenciales no tienen permisos productivos.

La seguridad del ambiente es parte del diseño de la prueba.

18.13 Observabilidad

Cuando una integración externa falla, necesitamos evidencia. El proveedor puede devolver un identificador de transacción, código de error o mensaje que ayude a diagnosticar.

Conviene registrar:

  • Identificador interno de la operación.
  • Identificador devuelto por el proveedor.
  • Código de respuesta.
  • Tipo de error.
  • Tiempo de respuesta.
  • Estado final guardado en nuestra aplicación.

Los logs deben ser útiles, pero no deben exponer secretos, tokens ni datos sensibles innecesarios.

18.14 Ejemplo: integración con pagos

Supongamos una integración con una pasarela de pagos. Algunas pruebas importantes serían:

Escenario Qué se verifica
Pago aprobado La orden queda pagada y se registra el identificador del proveedor.
Pago rechazado La orden no queda confirmada y no se descuenta stock indebidamente.
Timeout La operación queda pendiente o se informa error según la regla definida.
Reintento No se duplica el cobro ni la orden.
Credencial inválida El error se registra y se informa de forma controlada.

18.15 Ejemplo: integración con correo

Para un servicio de correo, las pruebas pueden enfocarse en que la aplicación solicite el envío correcto, sin enviar mensajes reales en cada ejecución.

Se puede verificar:

  • Destinatario correcto.
  • Asunto esperado.
  • Datos principales en el contenido.
  • No envío cuando la operación falló.
  • Manejo de rechazo del proveedor.

Un servidor de correo falso o una simulación puede capturar mensajes para inspeccionarlos sin contactar usuarios reales.

18.16 Errores comunes

Al integrar APIs y sistemas externos, suelen aparecer errores como:

  • Probar solamente respuestas exitosas.
  • Usar credenciales productivas en pruebas.
  • No manejar timeouts.
  • Reintentar operaciones no idempotentes sin control.
  • Simular respuestas que no respetan el contrato real.
  • No verificar el estado interno después de una respuesta externa.
  • Exponer tokens o datos sensibles en logs.

18.17 Lista de verificación

Antes de confiar en una integración externa, conviene revisar:

  • ¿La prueba usa ambiente seguro, sandbox o simulación controlada?
  • ¿El contrato de solicitud y respuesta está verificado?
  • ¿Se prueban errores relevantes del proveedor?
  • ¿Los timeouts y reintentos están configurados?
  • ¿Se evita duplicar efectos al reintentar?
  • ¿El estado interno queda consistente?
  • ¿Los logs ayudan a diagnosticar sin exponer secretos?

18.18 Qué debes recordar de este tema

  • Las integraciones externas agregan riesgos de disponibilidad, contrato, seguridad y efectos secundarios.
  • No siempre conviene usar el sistema real en cada prueba.
  • Sandbox y simulaciones ayudan a ejecutar pruebas seguras y repetibles.
  • Los errores, timeouts y reintentos son tan importantes como el camino exitoso.
  • La idempotencia evita duplicados en operaciones repetidas.
  • La observabilidad permite diagnosticar fallas sin exponer información sensible.

18.19 Conclusión

Las APIs y sistemas externos son puntos críticos de integración porque combinan contratos, red, seguridad, datos y efectos fuera del control directo del equipo.

Una buena prueba de integración externa debe ser segura, repetible y clara sobre qué dependencia está usando: real, sandbox o simulada. También debe verificar el estado interno de nuestra aplicación después de cada respuesta importante.

En el próximo tema veremos las pruebas de contratos entre productores y consumidores.