API-60-1
Funcionamiento:
Divide la URL usando explode("/", $_SERVER['REQUEST_URI']) para obtener las rutas
Filtra elementos vacíos del array con array_filter()
Evalúa diferentes casos según la cantidad de segmentos en la URL
Responde con JSON según el método HTTP (GET, POST, PUT, DELETE)
Divide la URL usando explode("/", $_SERVER['REQUEST_URI']) para obtener las rutas
Filtra elementos vacíos del array con array_filter()
Evalúa diferentes casos según la cantidad de segmentos en la URL
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}"
/ → "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
// 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:
✅ Estructura modular con funciones separadas
✅ Manejo adecuado de códigos HTTP
✅ Extracción correcta del ID
✅ Validación de métodos HTTP
✅ Mensajes de error apropiados
✅ Código más legible y mantenible
✅ Cabeceras JSON configuradas
✅ Manejo de casos edge
Comentarios
Publicar un comentario