API para un sitio de marketplace, permitiendo a los usuarios registrados publicar contenidos y reseñas.
GPL-3.0 License
Este proyecto implementa una API para un sitio de marketplace, permitiendo a los usuarios registrados publicar contenidos y reseñas. La API está desarrollada en Symfony y cumple con los requisitos específicos descritos a continuación.
Para instalar y ejecutar este proyecto en tu entorno local, sigue los siguientes pasos:
Clonar el repositorio:
git clone <url-del-repositorio>
cd <nombre-del-proyecto>
Instalar dependencias:
composer install
Configurar variables de entorno:
Crea un archivo .env.local
basado en .env
y configura las variables necesarias, como la conexión a la base de datos y las claves de cifrado para JWT.
Crear la base de datos:
php bin/console doctrine:database:create
Ejecutar migraciones:
php bin/console doctrine:migrations:migrate
Iniciar el servidor Symfony:
symfony server:start
La API estará disponible en http://localhost:8000
por defecto.
A continuación se detallan los endpoints implementados, indicando los métodos HTTP, parámetros de entrada y salida, así como una descripción de cada uno:
POST /api/register
Descripción: Registro de un nuevo usuario en el sistema.
Body:
{
"email": "[email protected]",
"password": "password"
}
POST /api/login
Descripción: Autenticación de un usuario y obtención de token JWT.
Body:
{
"email": "[email protected]",
"password": "password"
}
Respuesta Exitosa:
{
"token": "eyJhbGciOiJIUzI1NiIsIn..."
}
GET /api/user
Descripción: Obtener los datos del usuario autenticado.
Authorization Header:
Authorization: Bearer <token>
PUT /api/user
Descripción: Actualizar el perfil del usuario autenticado.
Authorization Header:
Authorization: Bearer <token>
Body (opcional):
{
"email": "[email protected]",
"password": "nuevapassword"
}
POST /api/content
Descripción: Crear un nuevo contenido en el marketplace.
Authorization Header:
Authorization: Bearer <token>
Body:
{
"title": "Nuevo Artículo",
"description": "Descripción del nuevo artículo",
"content": "Contenido enriquecido del nuevo artículo"
}
GET /api/content
Descripción: Obtener una lista de contenidos filtrados por título o descripción.
Parámetros de consulta opcionales:
title
: Filtra por título que haga match parcial.GET /api/content/{id}
Descripción: Obtener detalles específicos de un contenido por su ID.
PUT /api/content/{id}
Descripción: Actualizar un contenido existente en el marketplace.
Authorization Header:
Authorization: Bearer <token>
Body:
{
"title": "Título actualizado",
"description": "Descripción actualizada",
"content": "Contenido enriquecido actualizado"
}
DELETE /api/content/{id}
Descripción: Eliminar un contenido del marketplace.
Authorization Header:
Authorization: Bearer <token>
POST /api/content/{id}/rate
Descripción: Valorar un contenido específico.
Authorization Header:
Authorization: Bearer <token>
Body:
{
"value": 5
}
POST /api/content/{id}/favorite
Descripción: Marcar un contenido como favorito.
Authorization Header:
Authorization: Bearer <token>
GET /api/content/favorites
Descripción: Obtener una lista de contenidos marcados como favoritos por el usuario autenticado.
Authorization Header:
Authorization: Bearer <token>
Implementación de Paginación y Ordenamiento
Justificación: Actualmente, los endpoints que devuelven listados de contenidos no incluyen paginación ni opción de ordenamiento. Implementar paginación permitirá manejar grandes volúmenes de datos de manera eficiente, reduciendo la carga en el servidor y mejorando la experiencia del usuario al dividir los resultados en páginas manejables. Además, ofrecer opciones de ordenamiento (por ejemplo, por fecha, popularidad, etc.) proporcionará flexibilidad al usuario para explorar y encontrar contenido relevante de manera más efectiva.
Integración de Servicio de Almacenamiento en la Nube para Contenidos Multimedia
Justificación: En lugar de utilizar un sistema de almacenamiento de archivos local, integrar un servicio de almacenamiento en la nube (como AWS S3, Google Cloud Storage o Azure Blob Storage) ofrece varias ventajas. Mejora la escalabilidad al permitir almacenar grandes cantidades de datos sin preocuparse por la capacidad del servidor local. Además, proporciona redundancia y durabilidad mejorada de los datos, así como opciones avanzadas de seguridad y gestión de acceso a archivos.
Implementación de Auditoría y Registro de Actividades (Logs)
Justificación: Mantener un registro detallado de todas las actividades y eventos dentro de la aplicación (auditoría) es esencial para la supervisión de seguridad, la solución de problemas y la cumplimiento de normativas. Los registros deben incluir acciones como acceso a endpoints, cambios en datos sensibles, y operaciones de alta seguridad (como cambios en la contraseña o eliminación de datos). Estos registros no solo ayudan a detectar y responder rápidamente a posibles amenazas, sino que también son valiosos para la trazabilidad y la auditoría interna.
Este proyecto está licenciado bajo la GNU General Public License v3.0 (GPL-3.0).
El autor de este proyecto es Aythami Melián Perdomo ([email protected]), desarrollado en junio de 2024 bajo petición de la empresa Widitrade.