Una demostración de API RESTful para gestionar productos con Express.js y MongoDB

Crear un nuevo producto

Lista de Productos

Mostrando 0 productos
Página 1

Documentación de la API

Modelo de Producto

Estructura de datos del modelo Producto utilizado en la API:


{
  "_id": "String (MongoDB ObjectId)",
  "name": "String (requerido) - Nombre del producto",
  "description": "String (requerido) - Descripción detallada del producto",
  "price": "Number (requerido) - Precio del producto (min: 0)",
  "stock": "Number (requerido) - Cantidad disponible en inventario (min: 0, default: 0)",
  "category": "String (requerido) - Categoría a la que pertenece el producto",
  "imageUrl": "String (opcional) - URL de imagen del producto",
  "createdAt": "Date - Fecha de creación (automático)",
  "updatedAt": "Date - Fecha de última actualización (automático)"
}
                    

GET /api/products

Obtiene todos los productos disponibles en la base de datos.

/api/products ← Haz clic para probar

// Ejemplo de respuesta
{
  "status": "success",
  "results": 2,
  "data": {
    "products": [
      {
        "_id": "60d21b4667d0d8992e610c85",
        "name": "Smartphone XYZ",
        "description": "Un smartphone de última generación",
        "price": 599.99,
        "stock": 50,
        "category": "Electrónica",
        "imageUrl": "https://ejemplo.com/imagen.jpg",
        "createdAt": "2023-10-25T14:12:36.000Z",
        "updatedAt": "2023-10-25T14:12:36.000Z"
      },
      {
        "_id": "60d21b4667d0d8992e610c86",
        "name": "Laptop Pro",
        "description": "Laptop profesional con alto rendimiento",
        "price": 1299.99,
        "stock": 20,
        "category": "Computadoras",
        "imageUrl": "",
        "createdAt": "2023-10-25T14:15:22.000Z",
        "updatedAt": "2023-10-25T14:15:22.000Z"
      }
    ]
  }
}
                    

GET /api/products/:id

Obtiene un producto específico mediante su ID único de MongoDB.

/api/products/60d21b4667d0d8992e610c85 (Reemplaza con un ID válido)

// Ejemplo de respuesta
{
  "status": "success",
  "data": {
    "product": {
      "_id": "60d21b4667d0d8992e610c85",
      "name": "Smartphone XYZ",
      "description": "Un smartphone de última generación",
      "price": 599.99,
      "stock": 50,
      "category": "Electrónica",
      "imageUrl": "https://ejemplo.com/imagen.jpg",
      "createdAt": "2023-10-25T14:12:36.000Z",
      "updatedAt": "2023-10-25T14:12:36.000Z"
    }
  }
}

// Ejemplo de respuesta para ID no encontrado
{
  "status": "error",
  "message": "Producto no encontrado"
}
                    

POST /api/products

Crea un nuevo producto en la base de datos.

Método: POST | Content-Type: application/json


// Ejemplo de cuerpo de petición (request body)
{
  "name": "Smartphone XYZ",         // Requerido
  "description": "Un smartphone de última generación", // Requerido
  "price": 599.99,                  // Requerido, número > 0
  "stock": 50,                      // Requerido, número > 0
  "category": "Electrónica",        // Requerido
  "imageUrl": "https://ejemplo.com/imagen.jpg" // Opcional
}

// Ejemplo de respuesta exitosa (201 Created)
{
  "status": "success",
  "data": {
    "product": {
      "_id": "60d21b4667d0d8992e610c85",
      "name": "Smartphone XYZ",
      "description": "Un smartphone de última generación",
      "price": 599.99,
      "stock": 50,
      "category": "Electrónica",
      "imageUrl": "https://ejemplo.com/imagen.jpg",
      "createdAt": "2023-10-25T14:12:36.000Z",
      "updatedAt": "2023-10-25T14:12:36.000Z"
    }
  }
}

// Ejemplo de respuesta de error (400 Bad Request)
{
  "status": "error",
  "message": "El nombre del producto es obligatorio"
}
                    

PATCH /api/products/:id

Actualiza un producto existente por su ID. Solo los campos enviados serán actualizados.

Método: PATCH | Content-Type: application/json


// Ejemplo de cuerpo de petición (request body)
{
  "price": 499.99,   // Solo actualizar el precio
  "stock": 30        // y el stock
}

// Ejemplo de respuesta exitosa
{
  "status": "success",
  "data": {
    "product": {
      "_id": "60d21b4667d0d8992e610c85",
      "name": "Smartphone XYZ",
      "description": "Un smartphone de última generación",
      "price": 499.99,           // Precio actualizado
      "stock": 30,               // Stock actualizado  
      "category": "Electrónica", // Otros campos mantienen sus valores originales
      "imageUrl": "https://ejemplo.com/imagen.jpg",
      "createdAt": "2023-10-25T14:12:36.000Z",
      "updatedAt": "2023-10-25T15:25:12.000Z" // Fecha de actualización modificada
    }
  }
}

// Ejemplo de respuesta de error (404 Not Found)
{
  "status": "error",
  "message": "Producto no encontrado"
}
                    

DELETE /api/products/:id

Elimina permanentemente un producto por su ID.

Método: DELETE


// No requiere cuerpo de petición
                    
// Ejemplo de respuesta exitosa (204 No Content)
// La respuesta no contiene cuerpo, solo el código de estado 204

// Ejemplo de respuesta de error (404 Not Found)
{
  "status": "error",
  "message": "Producto no encontrado"
}
                    

Nuevas Funcionalidades

La API ahora incluye las siguientes funcionalidades adicionales:

Búsqueda y Filtrado Avanzados

Puedes filtrar productos usando múltiples parámetros:

  • GET /api/products?name=smartphone - Buscar por nombre
  • GET /api/products?category=electronics - Filtrar por categoría
  • GET /api/products?minPrice=100&maxPrice=500 - Filtrar por rango de precios
  • GET /api/products?inStock=true - Solo mostrar productos disponibles
  • GET /api/products?sort=price:asc - Ordenar por precio ascendente
  • GET /api/products?page=2&limit=10 - Paginación

Herramientas para probar la API

Puedes probar estos endpoints utilizando:

  • La interfaz de usuario en esta página
  • Herramientas como Postman o Insomnia
  • Consultas con fetch o axios desde tu código
  • Curl desde la terminal