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.
Continúa con una guía relacionada
Documentación oficial
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.