Desarrollar una aplicación web con frontend (HTML/JS) separado de un backend (PHP en POO + MySQL) expuesto como Web Service (API REST). La app debe incluir sistema de sesión con login y al menos un CRUD completo. El proyecto se versionará en GitHub con un README detallado y aplicará medidas mínimas de seguridad.
1) Alcance funcional mínimo
Elige una entidad (ej.: biblioteca, inventario, reservas, incidencias, tareas, alumnos/cursos).
Debe incluir, como mínimo:
- 1 entidad principal con CRUD completo: Crear, Leer (lista + detalle), Actualizar, Eliminar.
- Autenticación de usuarios con login/logout y sesión (no solo “mock”).
- Autorización básica: acciones protegidas solo para usuarios autenticados.
- Listado con búsqueda y/o filtrado en el frontend.
- Validaciones en front y back.
Sugerencia de entidades:
users(para login) + una entidad de negocio comoitems,courses,tickets,bookings, etc.
2) Requisitos técnicos
- Backend
- Lenguaje: PHP (>=7.4; recomendable 8.x).
- Estilo: POO (clases para modelos, controladores, servicios/repositorios).
- Acceso a datos: MySQL con prepared statements (PDO o MySQLi).
- Rutas tipo REST:
/api/...que devuelvan JSON. - Gestión de sesión (PHP session)
- Frontend
- HTML + CSS + JS (vanilla).
- Consume la API vía
fetch.
- Separación front/back
- epositorio con carpetas:
/frontendy/backend.
- epositorio con carpetas:
- Base de datos
- Script
db/schema.sql+db/seed.sql(opcional) para poblar datos de prueba.
- Script
- GitHub
- Uso de commits frecuentes, ramas (opcional) y README completo.
- Documentación
- README.md en raíz con: descripción, arquitectura, requisitos, instalación, variables de entorno, comandos, endpoints, roles, capturas/GIF, autores.
3) Seguridad (mínimos obligatorios)
- Passwords: almacenar con
password_hash()/password_verify(). - SQL Injection: PDO + prepared statements SIEMPRE.
- Sesiones:
session.cookie_httponly = 1,session.cookie_secure = 1(si HTTPS),SameSite=Lax.- Regenerar ID de sesión tras login.
- Tiempo de inactividad y expiración configurados.
- Reglas de BD: usuario MySQL con mínimos privilegios (solo la base usada).
- Errores: no exponer trazas en producción; logs internos.
- Validación: back valida todo; front valida para UX, pero back es la autoridad
- Backups: script/nota de backup de la BD (aunque sea manual).
4) Entregables
- URL del repositorio GitHub (público o acceso concedido si privado).
- README.md completo.
- Script SQL (
db/schema.sql+seed.sqlopcional). - Capturas o GIF corto del flujo principal (login + CRUD).
- Colección de Postman/Thunder Client (opcional, suma).
- Checklist de seguridad marcada (ver abajo).
5) Plantilla de README.md (copiar/pegar)
# Nombre del Proyecto
Descripción corta del dominio elegido y objetivo de la app.
## Arquitectura
– Frontend (HTML/JS) en `/frontend` consumiendo API REST JSON.
– Backend (PHP OOP + MySQL) en `/backend` exponiendo `/api/…`.
## Requisitos
– PHP 8.x, MySQL 5.7/8.x, servidor web (Apache/Nginx), Node (opcional).
– Copiar `.env.example` a `.env` y completar valores.
## Instalación
1. Clonar repo.
2. Importar `db/schema.sql` (y `db/seed.sql` opcional).
3. Configurar VirtualHost/servir `/backend/public` como raíz del back.
4. Configurar `FRONT_ORIGIN` en `.env` y CORS.
5. Abrir `/frontend/index.html` (o servir con dev server).
## Scripts útiles
– (Opcional) `composer install`, `php -S localhost:8000 -t backend/public`, etc.
## Endpoints (resumen)
– `POST /api/auth/login` — login (JSON body: email, password)
– `POST /api/auth/logout` — logout
– `GET /api/auth/me` — usuario autenticado
– CRUD entidad principal: `/api/items`…
## Seguridad aplicada
– Hashing, prepared statements, CSRF/SameSite, cabeceras, etc. (Checklist abajo)
## Capturas
(Insertar imágenes o GIF)
## Checklist de Seguridad
– [ ] …


![[Reto] - Miniaplicación web con PHP, MySQLi y JavaScript (Sin POO) 0406ee2c-f553-451d-8d19-8fed5738a401](https://laaventuradeaprender.com/wp-content/uploads/2026/03/0406ee2c-f553-451d-8d19-8fed5738a401-1-150x150.png)