API RESTful para la gestión de estudiantes, cursos e inscripciones en una plataforma de cursos online.
- Backend construido con Laravel 12
- Autenticación basada en tokens (Laravel Sanctum)
- Base de datos MariaDB
- Totalmente RESTful, bajo patrón MVC
- Incluye colección Postman y dump SQL de ejemplo
- PHP 8.1 o superior
- Composer 2.x
- MariaDB (o MySQL compatible)
- Extensiones PHP recomendadas:
pdo_mysqlmbstringopensslintltokenizerxmlcurl
Opcional (solo para desarrollo):
- Node.js + npm (si se usan assets frontend, no requerido para esta API)
- Postman/Insomnia para probar la API
git clone https://github.com/USUARIO/cursos-api.git
cd cursos-apiReemplazar
USUARIOpor tu usuario de GitHub.
composer installCopiar el archivo de ejemplo:
cp .env.example .envEditar .env y configurar la conexión a MariaDB:
APP_NAME="Cursos API"
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
# Base de datos
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=secretAjustar
DB_DATABASE,DB_USERNAME,DB_PASSWORDsegún tu entorno (XAMPP, Laragon, etc).
php artisan key:generateEste comando crea todas las tablas necesarias:
php artisan migrateSi querés recrear la base de datos desde cero:
php artisan migrate:freshSi el proyecto incluye seeders, podés cargar datos de ejemplo con:
php artisan migrate:fresh --seedAdemás, se incluye un dump SQL de ejemplo:
database/dump_cursos_api.sql
Podés importarlo manualmente en MariaDB si lo preferís.
php artisan servePor defecto la API quedará disponible en:
http://localhost:8000
La API usa tokens personales de Laravel Sanctum.
Endpoint
POST /api/v1/auth/registerBody JSON
{
"name": "Admin User",
"email": "admin@example.com",
"password": "password123"
}POST /api/v1/auth/loginBody JSON
{
"email": "admin@example.com",
"password": "password123"
}Respuesta esperada
{
"token": "e098478a2c..."
}Agregar el header:
Authorization: Bearer {token}Ejemplo:
GET /api/v1/students
Authorization: Bearer e098478a2c...Todos los endpoints están bajo el prefijo:
/api/v1
y requieren autenticación (excepto auth/register y auth/login).
Registrar usuario admin (simple).
Login y generación de token.
Lista de estudiantes (con filtros y paginación).
Query params opcionales:
search– busca pornameoemailnationality– filtra por nacionalidad exactasort_by–id,name,email,birthdatesort_dir–asc|descper_page– cantidad por página (por defecto 15)page– número de página
Ejemplo:
GET /api/v1/students?search=john&per_page=10&sort_by=name&sort_dir=ascVer detalles de un estudiante.
Crear estudiante.
Body JSON:
{
"name": "John Doe",
"email": "john.doe@example.com",
"birthdate": "2000-01-01",
"nationality": "Paraguayan"
}Actualizar estudiante.
{
"name": "John Doe Updated",
"nationality": "Argentinian"
}Eliminar estudiante.
Lista de cursos.
Query params opcionales:
title– filtro por título (LIKE)start_date_from– fecha de inicio desdestart_date_to– fecha de inicio hastasort_by–id,title,start_date,end_datesort_dir–asc|descper_page– cantidad por página
Ver detalles de un curso.
Crear curso.
{
"title": "Introducción a PHP",
"description": "Curso básico de PHP.",
"start_date": "2025-01-01",
"end_date": "2025-02-01"
}Actualizar curso.
{
"title": "Introducción a PHP (Actualizado)",
"description": "Curso básico de PHP actualizado."
}Eliminar curso.
Inscribir estudiante en un curso.
{
"student_id": 1,
"course_id": 1
}Responde con el objeto de inscripción creado.
Lista de cursos en los que está inscrito un estudiante.
Lista de estudiantes inscritos en un curso.
Eliminar inscripción.
El proyecto usa PHPUnit.
Ejecutar todos los tests:
php artisan testLos tests cubren principalmente:
- Endpoints de creación y validación de estudiantes/cursos
- Respuestas JSON y códigos de estado HTTP
- Manejo de errores de validación
Se incluye un dump de la base de datos (estructura + datos de prueba):
database/dump_cursos_api.sql
Para importarlo en MariaDB:
mysql -u USUARIO -p laravel < database/dump_cursos_api.sqlEn la raíz del proyecto se incluye una colección Postman:
postman/cursos-api.postman_collection.json
- Abrir Postman.
- Clic en Import.
- Seleccionar
cursos-api.postman_collection.json. - Revisar la variable
base_url(por defectohttp://localhost:8000). - Ejecutar:
Auth / RegisterAuth / Login(guarda el token en la variabletoken).- Luego probar las requests de
Students,Courses,Enrollments.
- Código siguiendo estándares PSR-1, PSR-2 y PSR-4.
- Tipado estricto (
declare(strict_types=1);en clases principales). - Arquitectura MVC con controladores RESTful.
- Manejo centralizado de excepciones para respuestas JSON consistentes.
- Validaciones robustas mediante Form Requests de Laravel.
- Uso de Eloquent ORM con relaciones:
Student↔Course(many-to-many a través deEnrollment).
Este proyecto puede utilizarse como base para evaluaciones técnicas, pruebas o proyectos educativos.