API-60-1

 Funcionamiento:

  1. Divide la URL usando explode("/", $_SERVER['REQUEST_URI']) para obtener las rutas

  2. Filtra elementos vacíos del array con array_filter()

  3. Evalúa diferentes casos según la cantidad de segmentos en la URL

  4. Responde con JSON según el método HTTP (GET, POST, PUT, DELETE)

Endpoints que maneja:

  • / → "no encontrado"

  • /registro POST → "Guardar registro"

  • /cursos GET → "Mostrando todos los cursos"

  • /cursos POST → "Curso creado"

  • /cursos/{id} GET → "Curso con id {id}"

  • /cursos/{id} PUT → "Curso editado con id {id}"

  • /cursos/{id} DELETE → "Se ha borrado el curso con id {id}"

Reescrito y mejorado:

php
<?php

// Configuración de cabeceras para API JSON
header('Content-Type: application/json');

// Obtener y procesar la URL
$arrayRutas = array_values(array_filter(explode("/", $_SERVER['REQUEST_URI'])));
$metodo = $_SERVER['REQUEST_METHOD'];

// Obtener el ID si existe
$id = null;
if (isset($arrayRutas[1]) && is_numeric($arrayRutas[1])) {
    $id = (int)$arrayRutas[1];
}

// Manejo de rutas principales
$rutaPrincipal = $arrayRutas[0] ?? '';

// Enrutamiento principal
switch ($rutaPrincipal) {
    case '':
        // Ruta raíz
        responderJson(["detalle" => "no encontrado"], 404);
        break;
        
    case 'registro':
        manejarRegistro($metodo);
        break;
        
    case 'cursos':
        manejarCursos($metodo, $id, $arrayRutas);
        break;
        
    default:
        responderJson(["detalle" => "Ruta no válida"], 404);
}

// Funciones específicas para cada endpoint
function manejarRegistro($metodo) {
    if ($metodo === 'POST') {
        responderJson(["detalle" => "Guardar registro"], 201);
    } else {
        responderJson(["detalle" => "Método no permitido para registro"], 405);
    }
}

function manejarCursos($metodo, $id, $rutas) {
    switch ($metodo) {
        case 'GET':
            if ($id === null) {
                // GET /cursos - Todos los cursos
                responderJson(["detalle" => "Mostrando todos los cursos"]);
            } else {
                // GET /cursos/{id} - Curso específico
                responderJson(["detalle" => "Curso con id " . $id]);
            }
            break;
            
        case 'POST':
            if ($id === null) {
                // POST /cursos - Crear curso
                responderJson(["detalle" => "Curso creado"], 201);
            } else {
                responderJson(["detalle" => "Método no permitido"], 405);
            }
            break;
            
        case 'PUT':
            if ($id !== null) {
                // PUT /cursos/{id} - Actualizar curso
                responderJson(["detalle" => "Curso editado con id " . $id]);
            } else {
                responderJson(["detalle" => "ID requerido para PUT"], 400);
            }
            break;
            
        case 'DELETE':
            if ($id !== null) {
                // DELETE /cursos/{id} - Eliminar curso
                responderJson(["detalle" => "Se ha borrado el curso con id " . $id]);
            } else {
                responderJson(["detalle" => "ID requerido para DELETE"], 400);
            }
            break;
            
        default:
            responderJson(["detalle" => "Método no permitido"], 405);
    }
}

// Función auxiliar para respuestas JSON
function responderJson($datos, $codigoHttp = 200) {
    http_response_code($codigoHttp);
    echo json_encode($datos, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
    exit;
}

Mejoras implementadas:

  1. ✅ Estructura modular con funciones separadas

  2. ✅ Manejo adecuado de códigos HTTP

  3. ✅ Extracción correcta del ID

  4. ✅ Validación de métodos HTTP

  5. ✅ Mensajes de error apropiados

  6. ✅ Código más legible y mantenible

  7. ✅ Cabeceras JSON configuradas

  8. ✅ Manejo de casos edge

Comentarios

Entradas más populares de este blog

60. Construcción de Controladores

Api-60-2

Te ayudo a crear una API muy sencilla en PHP utilizando esos datos