Este ejercicio te ayudará a aprender cómo crear un servidor web básico con Node.js sin usar frameworks, implementando un API REST simple para gestionar información sobre frutas.
Crear un servidor HTTP que responda a diferentes rutas (pathname) de la URL y devuelva información sobre frutas en formato JSON.
- Servidor HTTP básico usando los módulos
httpyurlde Node.js. - Manejo de múltiples rutas (
/,/frutas/all,/frutas/id/:id,/frutas/nombre/:nombre,/frutas/existe/:nombre). - Devolución de respuestas en formato JSON.
- Manejo de errores (400 Bad Request, 404 Not Found).
- Búsqueda de frutas por nombre parcial e ignorando mayúsculas/minúsculas.
- Verificación de existencia de fruta por nombre exacto e ignorando mayúsculas/minúsculas.
- Un script de pruebas automatizadas para verificar el correcto funcionamiento de las rutas y casos de borde.
GET /→ Mensaje de bienvenida.GET /frutas/all→ Lista completa de todas las frutas.GET /frutas/id/:id→ Buscar una fruta específica por su ID.- Responde con la fruta (200 OK) si se encuentra.
- Responde con un error 404 Not Found si el ID no existe.
- Responde con un error 400 Bad Request si el ID no es un número válido.
GET /frutas/nombre/:nombre→ Buscar frutas que contengan el texto proporcionado en su nombre (búsqueda parcial, insensible a mayúsculas/minúsculas).- Responde con un array de frutas (200 OK). El array puede estar vacío si no hay coincidencias.
GET /frutas/existe/:nombre→ Verificar si existe exactamente una fruta con el nombre proporcionado (insensible a mayúsculas/minúsculas).- Responde con un objeto JSON
{ nombre: '...', existe: true/false }(200 OK).
- Responde con un objeto JSON
- Cualquier otra ruta → Error 404 Not Found.
- Asegúrate de tener Node.js instalado.
- Clona o descarga el código.
- Guarda el código del servidor en un archivo (por ejemplo,
index.js). - Guarda el código de los tests en otro archivo (por ejemplo,
test.js). - Inicia el servidor desde tu terminal:
node index.js
- Abre otra terminal y ejecuta los tests (asegúrate de que el servidor esté corriendo):
node test.js
- También puedes usar herramientas como
curlo la extensión REST Client en VS Code (usando el archivoapi.httpproporcionado) para probar las rutas manualmente.
- La lista de frutas está actualmente definida directamente en el código (
frutasData) para simplificar. En una aplicación real, estos datos provendrían típicamente de una base de datos o un archivo externo. - El parseo de rutas se realiza dividiendo el
pathnamede la URL en segmentos. - La búsqueda por nombre utiliza
String.prototype.includes()y conversión a minúsculas (toLowerCase()) para la búsqueda parcial e insensible a mayúsculas/minúsculas. - La verificación de existencia utiliza
Array.prototype.some()y conversión a minúsculas para la búsqueda exacta e insensible a mayúsculas/minúsculas.
Aquí tienes ejemplos del formato de respuesta que la API debería devolver:
// GET http://localhost:3000/
{ "mensaje": "¡Bienvenido a la API de Frutas!" }
// GET http://localhost:3000/frutas/all
[
{ "id": 1, "nombre": "manzana", "color": "rojo" },
{ "id": 2, "nombre": "banana", "color": "amarillo" },
{ "id": 3, "nombre": "naranja", "color": "naranja" },
{ "id": 4, "nombre": "uva", "color": "morado" },
{ "id": 5, "nombre": "fresa", "color": "rojo" },
{ "id": 6, "nombre": "manzana verde", "color": "verde" }
]
// GET http://localhost:3000/frutas/id/1
{ "id": 1, "nombre": "manzana", "color": "rojo" }
// GET http://localhost:3000/frutas/id/999
{ "error": "Fruta con ID 999 no encontrada" }
// GET http://localhost:3000/frutas/nombre/manz
[
{ "id": 1, "nombre": "manzana", "color": "rojo" },
{ "id": 6, "nombre": "manzana verde", "color": "verde" }
]
// GET http://localhost:3000/frutas/nombre/platano
[] // Array vacío si no hay coincidencias
// GET http://localhost:3000/frutas/existe/manzana
{ "nombre": "manzana", "existe": true }
// GET http://localhost:3000/frutas/existe/KiWi
{ "nombre": "kiwi", "existe": false }
// GET http://localhost:3000/ruta/invalida
{ "error": "Ruta no encontrada" }