Por alguna razón, mi servidor siempre me regresa un código 200, no importa si no existe el recurso o el elemento. En mi servidor tengo el...

Gustavo Alonso Medina Santiago

Gustavo Alonso Medina Santiago

Pregunta
studenthace 4 años

Por alguna razón, mi servidor siempre me regresa un código 200, no importa si no existe el recurso o el elemento.

En mi servidor tengo el siguiente código:

/** Definimos los recursos disponbiles */ $allowedResourceTypes = [ 'books', 'authors', 'genres' ]; /** Validamos si el recurso solicitado está disponivlo */ $resourceType = $_GET['resource_type']; if (!in_array($resourceType, $allowedResourceTypes)) { http_response_code(400); die; }

Y mi cliente se compone de lo siguiente:

<?php $ch = curl_init($argv[1]); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); switch ($httpCode) { case 200: echo 'Todo bien!'; break; case 400: echo 'Pedido incorrecto.'; break; case 404: echo 'Recurso no encontrado'; break; case 500: echo 'El servidor falló'; break; default: # code... break; }

Sin embargo cuando ejecuto en mi consola

php client.php http://localhost:8000/bo

Me regresa un código 200, cuando me debería regresar un código 400

No sé que pueda ser 😕

4 respuestas
para escribir tu comentario
    Luis José Cruz Martínez

    Luis José Cruz Martínez

    studenthace 4 años

    Lo solucioné con la respuesta de @joex45125 Por aquí cito su respuesta: Para el que le sirva lo solucione comentando la validación por tokens supongo que devolvía 200 antes de llegar a validar los recursos y realmente en este ejercicio no se esta usando.

    Eduardo Reyes

    Eduardo Reyes

    studenthace 4 años

    Tengo el mismo problema, es codigo es exactamente el mismo del profesor y los comandos también, pero siempre regresa un codigo 200, incluso poniendo /bo o /adjandlkanmdlaksd siempre regresa lo mismo, pero al hacer la consulta para que me regrese el .jason si funciona.

    Gustavo Alonso Medina Santiago

    Gustavo Alonso Medina Santiago

    studenthace 4 años

    Pero para esto se usa la función

    http_response_code(400)

    ¿No es así? Verifico si el recurso lógico solicitado está en el arreglo de recursos lógicos disponibles, y si no es así, envío un http_response_code(400)

    Jose Aaron Chavez Soto

    Jose Aaron Chavez Soto

    studenthace 4 años

    Te regresa el código 200, porque tu archivo servidor.php al cual le haces la petición siempre existe.

    Lo que no existe es el "recurso: bo" que en realidad a nivel de código es un parámetro que se pasa mediante el método GET a tu archivo servidor.php, si dicho parámetro no es "books", "authors" o "genres" significa que simplemente "bo" no forma parte de ese arreglo.

    TAMBIÉN SE PUEDE VER DE ESTA OTRA FORMA: servidor.php es un ++recurso real++ en el servidor. "books", "authors", "genres" son ++recursos lógicos++.

    Entonces los códigos HTTP como el 200 verifican la existencia de ++recursos reales++, no de recursos lógicos. PHP se encarga de verificar la existencia de los ++recursos lógicos++ mediante funciones como in_array() y regresando true o false si existe o no existe dicho ++recurso lógico++.

Curso de API REST [Empieza Gratis]

Curso de API REST [Empieza Gratis]

Desarrolla APIs REST con PHP conectando aplicaciones y estructuras web. Aprende a implementar protocolos HTTP y REST, gestionar peticiones GET, POST y errores, y aplicar autenticación segura. Publica y accede a APIs en servidores.

Curso de API REST [Empieza Gratis]
Curso de API REST [Empieza Gratis]

Curso de API REST [Empieza Gratis]

Desarrolla APIs REST con PHP conectando aplicaciones y estructuras web. Aprende a implementar protocolos HTTP y REST, gestionar peticiones GET, POST y errores, y aplicar autenticación segura. Publica y accede a APIs en servidores.