Programación del lado del servidor y APIs
Este dominio examina cómo se recibe, valida y responde una petición en el servidor, y cómo se diseña una API REST comprensible. Se pregunta por rutas, middleware, códigos de estado, formato JSON, validación de entrada, autenticación y CORS.
Servidor, rutas y middleware
- El servidor escucha peticiones, aplica middleware (logging, autenticación, parseo de JSON) y llega al controlador de la ruta.
- Una ruta se define por método y ruta:
GET /api/cursos,POST /api/cursos,GET /api/cursos/:id. - El controlador valida, llama al modelo o servicio y devuelve una respuesta con código y cuerpo JSON.
- La validación de entrada se hace en el servidor aunque exista validación en el cliente. Nunca se confía en el navegador.
Diseño REST
- Los recursos son sustantivos en plural; el método expresa la acción. No se diseña
GET /borrarCurso. - GET lee, POST crea, PUT reemplaza, PATCH modifica parcialmente y DELETE elimina.
- Códigos coherentes: 200 lectura correcta, 201 creación con cabecera
Location, 204 sin contenido, 400 datos inválidos, 401 no autenticado, 403 sin permiso, 404 no encontrado, 409 conflicto, 422 validación semántica y 500 error interno. - Las listas se paginan con
pageylimito con cursores; se devuelve metadata además de los datos. - CORS es una política del navegador: el servidor declara qué orígenes puede leer la respuesta. No protege una API de llamadas directas con herramientas externas.
Ejemplo trabajado
POST /api/estudiantes recibe {nombre, correo}. El servidor valida que ambos existan, que el correo tenga formato y que no esté duplicado. Si falta nombre, responde 400 con {errores:[{campo:'nombre',mensaje:'requerido'}]}. Si el correo ya existe, responde 409. Si todo es correcto, crea el registro y responde 201 con Location: /api/estudiantes/42 y el recurso creado. El razonamiento: 400 indica entrada inválida, 409 un conflicto de unicidad y 201 el éxito de una creación.
Errores que cuestan puntos
Devolver 200 con {error:...}; exponer trazas internas al cliente; confiar en la validación del navegador; usar GET para operaciones que modifican datos; no paginar listas; creer que CORS es autenticación; guardar secretos en el frontend.