Qué es el cliente HTTP
El cliente HTTP de Laravel es una API sencilla que envuelve a Guzzle. A través del facadeHttp puedes escribir con concisión peticiones HTTP a servicios y APIs externas.
Guzzle viene preinstalado, así que puedes empezar a usar el cliente sin configuración adicional.
Peticiones básicas
Petición GET
Petición POST
Los datos se envían por defecto comoapplication/json.
PUT / PATCH / DELETE
Manejo de la respuesta
Métodos comoHttp::get() devuelven una instancia de Illuminate\Http\Client\Response.
El objeto ofrece numerosos métodos para inspeccionar la respuesta.
Opciones de la petición
Cabeceras
application/json, acceptJson() es una forma más cómoda.
Para las cabeceras CSRF (
X-CSRF-TOKEN / X-XSRF-TOKEN) en peticiones AJAX del navegador hacia Laravel, consulta protección CSRF.Autenticación
Autenticación con Bearer token (la más habitual):URL base
Si haces muchas peticiones al mismo host, agrúpalas conbaseUrl().
Enviar datos de formulario
Para enviar conapplication/x-www-form-urlencoded utiliza asForm().
Timeouts
Reintentos
Puedes configurar reintentos automáticos ante errores puntuales de red o del servidor.Gestión de errores
Comprobar los errores manualmente
Por defecto, el cliente HTTP de Laravel no lanza excepciones ante respuestas 4xx o 5xx. Compruébalas explícitamente confailed(), clientError(), etc.
Lanzar excepciones
Conthrow() se lanza Illuminate\Http\Client\RequestException cuando hay errores.
throw() devuelve la propia respuesta, por lo que se puede encadenar.
Peticiones concurrentes
Cuando necesites llamar a varias APIs simultáneamente, utilizapool() para ejecutarlas en paralelo.
Pruebas
Mock con Http::fake()
En tests usa Http::fake() para simular respuestas sin realizar la petición real.
Aserciones sobre la petición
ConHttp::assertSent() puedes validar el contenido de las peticiones enviadas.
Prevención de peticiones no simuladas
Ejemplo práctico: clase de servicio para una API externa
En proyectos reales, la buena práctica es agrupar la lógica del cliente HTTP en clases de servicio.1
Crear la clase de servicio
2
Registrar el servicio en el service provider
3
Usarlo desde el controlador
4
Escribir los tests
Resumen
Métodos más habituales
Métodos más habituales
Métodos de comprobación de la respuesta
Métodos de comprobación de la respuesta
Buenas prácticas al integrar APIs externas
Buenas prácticas al integrar APIs externas
- Agrupa la lógica del cliente HTTP en clases de servicio.
- Configura siempre un timeout (
timeout()yconnectTimeout()). - Configura reintentos para errores puntuales (
retry()). - En los tests utiliza siempre
Http::fake()y no llames nunca a las APIs reales. - Añadir
Http::preventStrayRequests()al setup te da un extra de tranquilidad. - Guarda tokens y credenciales en variables de entorno y en
config/services.php.