Introducción
En esta lección implementaremos las funcionalidades para obtener todos los libros, obtener un libro específico, actualizar libros y obtener la URL del PDF. Completaremos así nuestro CRUD básico para el manejo de libros.
1. Obtener Todos los Libros
Configuración del Endpoint
- Método:
GET
- URL:
/books
- Propósito: Obtener la lista completa de libros
Configuración en Postman
- Crear nueva petición: «Obtener Todos los Libros»
- Método: Cambiar de POST a GET
- URL:
http://localhost:3000/books
- Enviar petición y verificar respuesta
json// Respuesta esperada
[
{
"id": "1",
"title": "El Gran Gatsby",
"author": "F. Scott Fitzgerald",
"category": "ficción",
"price": 9.99,
// ... más campos
}
]
2. Obtener un Libro Específico
Configuración del Endpoint
- Método:
GET
- URL:
/books/:id/details
- Propósito: Obtener información detallada de un libro específico
Implementación en Postman
- Crear nueva petición: «Detalles del Libro»
- Método: GET
- URL:
http://localhost:3000/books/[ID_DEL_LIBRO]/details
- Reemplazar [ID_DEL_LIBRO] con un ID real de la base de datos
Ejemplo de Uso
GET /books/64f2a1b5c8d4e5f6a7b8c9d0/details
3. Actualizar un Libro
Configuración del Endpoint
- Método:
PUT
- URL:
/books/:id
- Propósito: Actualizar información de un libro existente
Configuración en Postman
- Crear nueva petición: «Actualizar Libro»
- Método: PUT
- URL:
http://localhost:3000/books/[ID_DEL_LIBRO]
- Body: Incluir campos a actualizar
Ejemplo de Actualización
json{
"title": "El Gran React",
"description": "Un libro actualizado sobre React",
"price": 12.99
}
4. Solución de Problemas de Autorización
Error Común: «No autorizado»
Problema: Al intentar actualizar, aparece el error «not authorized to update this book»
Causa: Error en la validación de permisos en el controlador
Solución
- Revisar el controlador de actualización
- Verificar la lógica de autorización: javascript
// Incorrecto if (req.user !== book.uploadedBy) { return res.status(401).json({ error: 'No autorizado' }); } // Correcto if (req.user.id !== book.uploadedBy.toString()) { return res.status(401).json({ error: 'No autorizado' }); }
- Asegurar que el middleware de autenticación funcione correctamente
5. Obtener URL del PDF
Configuración del Endpoint
- Método:
GET
- URL:
/books/:id/pdf
- Propósito: Obtener únicamente la URL del archivo PDF
Implementación en Postman
- Crear nueva petición: «Obtener URL del PDF»
- Método: GET
- URL:
http://localhost:3000/books/[ID_DEL_LIBRO]/pdf
Respuesta Esperada
json{
"pdfUrl": "https://res.cloudinary.com/your-cloud/raw/upload/v1234567890/books/sample.pdf"
}
6. Resumen de Endpoints Implementados
Lista Completa de Endpoints
Método | Endpoint | Descripción |
---|---|---|
POST | /books | Crear nuevo libro |
GET | /books | Obtener todos los libros |
GET | /books/:id/details | Obtener detalles de un libro |
PUT | /books/:id | Actualizar libro |
GET | /books/:id/pdf | Obtener URL del PDF |
Códigos de Estado HTTP
- 200: Operación exitosa
- 201: Libro creado exitosamente
- 400: Datos de entrada inválidos
- 401: No autorizado
- 404: Libro no encontrado
- 500: Error interno del servidor
7. Pruebas y Validación
Lista de Verificación
- ✅ Obtener todos los libros: La lista se muestra correctamente
- ✅ Obtener libro específico: Los detalles se muestran completos
- ✅ Actualizar libro: Los cambios se guardan correctamente
- ✅ Obtener URL del PDF: La URL es accesible y funcional
- ✅ Manejo de errores: Los errores se muestran apropiadamente
Datos de Prueba
Para probar las funcionalidades, asegúrate de tener:
- Al menos un libro creado en la base de datos
- Token de autenticación válido para operaciones protegidas
- IDs de libros reales para las pruebas de detalles y actualización
8. Mejores Prácticas
Validación de Entrada
- Verificar que los IDs sean válidos antes de procesar
- Validar campos requeridos en las actualizaciones
- Sanitizar datos de entrada para evitar inyecciones
Respuestas Consistentes
- Estructura uniforme en todas las respuestas
- Mensajes de error claros y descriptivos
- Códigos de estado HTTP apropiados
Seguridad
- Autenticación requerida para operaciones sensibles
- Autorización adecuada para prevenir acceso no autorizado
- Validación de pertenencia del recurso al usuario
Conclusión
Con estos endpoints implementados, tenemos un sistema completo de gestión de libros que permite:
- ✅ Operaciones CRUD completas
- ✅ Manejo seguro de archivos PDF
- ✅ Control de acceso y autorización
- ✅ APIs RESTful bien estructuradas
El controlador de libros está ahora completamente funcional y listo para integrarse con el frontend de la aplicación. Con solo unos pocos prompts bien estructurados, hemos logrado crear endpoints robustos y funcionales.