consumir API REST PHP

Consumir una API REST con PHP: transporte, HTTP y JSON

Separa un fallo de conexión, un código HTTP de error y un cuerpo JSON inválido antes de utilizar una respuesta.

Tipo: Guía práctica Lectura: 4 min Actualizado: 2026-11-03
Ejemplo visual para Consumir una API REST con PHP paso a paso

Guía y comprobaciones

Tres comprobaciones diferentes

Una petición puede alcanzar el servidor y recibir un error HTTP, o recibir un HTTP 200 cuyo cuerpo no cumple lo esperado. No trates esos casos como una lista vacía. En PHP con la extensión cURL, configura tiempos de espera y recupera el cuerpo como una cadena. El dominio siguiente es ilustrativo: sustitúyelo por un servicio cuyo contrato conozcas.

$url = 'https://api.example.com/elementos';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 15,
    CURLOPT_HTTPHEADER => ['Accept: application/json'],
]);
$cuerpo = curl_exec($ch);
$estado = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($cuerpo === false) {
    throw new RuntimeException('Fallo de transporte');
}
if ($estado < 200 || $estado >= 300) {
    throw new RuntimeException('Respuesta HTTP no aceptada: '.$estado);
}
$datos = json_decode($cuerpo, true, 512, JSON_THROW_ON_ERROR);
if (!is_array($datos)) {
    throw new RuntimeException('Estructura inesperada');
}

Comprobar el contrato

Que el JSON sea válido no garantiza que exista el campo items ni que cada elemento tenga un identificador. Valida las claves que vas a usar y distingue un campo ausente de un valor permitido como cero. Un cambio de versión de la API puede mantener el HTTP 200 y cambiar su estructura.

Para probar el procesamiento sin llamar a un tercero, utiliza un cuerpo fijo: {"items":[{"id":7}]}. Después prueba un texto que no sea JSON y un objeto sin items. Así localizas si el fallo está en la solicitud o en tu interpretación.

Reintentos y secretos

No desactives la validación TLS para resolver un certificado fallido. Mantén las credenciales fuera del código público y de las URLs que puedan registrarse. Si la API necesita autenticación, añade el encabezado indicado por su proveedor desde una configuración protegida.

Una petición de lectura puede admitir reintentos limitados según su contrato. Un POST que crea un pedido, mensaje o cobro exige además reconciliación o una clave de idempotencia: un timeout no demuestra que el servidor no hiciera la operación. Ante límites de cuota, respeta el tiempo indicado en la respuesta en lugar de repetir la solicitud en un bucle.

Preguntas frecuentes

¿HTTP 200 significa que el JSON es válido?

No. Comprueba también el formato y los campos del contrato esperado.

¿Puedo usar este ejemplo sin cURL?

El ejemplo necesita la extensión cURL. Otra biblioteca puede servir, pero debe conservar controles de TLS, tiempo, estado HTTP y estructura.

Documentación oficial

R

Autora de la guia

Redacción de Línea de Código

Publicación independiente de programación y trámites digitales

Guías con ejemplos y referencias oficiales para aprender programación y preparar gestiones digitales. Las solicitudes se completan en el organismo responsable.

Actualizado: 2026-11-03 Politica editorial Correcciones

Por que confiar

Contrastamos fuentes oficiales, actualizamos piezas clave y priorizamos estructura, contexto y enlazado interno por encima del relleno.

Compartir

Guarda o comparte esta guia con el enlace limpio.