API RESTful para la gestión de cursos, estudiantes e inscripciones.
- Laravel: 12
- Base de Datos: MySQL 8.0
- Autenticación: Laravel Sanctum
- PHP >= 8.2
- Composer
- MySQL 8.0
-
Clonar el repositorio
git clone https://github.com/vicriveros/courses_api.git cd courses_api -
Instalar dependencias
composer install
-
Configurar el archivo de entorno
cp .env.example .env
-
Configurar la base de datos en
.envDB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=courses_api DB_USERNAME=root DB_PASSWORD=
-
Generar la clave de aplicación
php artisan key:generate
-
Ejecutar las migraciones y seeders
php artisan migrate --seed
-
Iniciar el servidor de desarrollo
php artisan serve
La API estará disponible en
http://127.0.0.1:8000
Se incluye una colección de Postman para probar todos los endpoints de la API:
- Archivo:
Courses API.postman_collection.json - Importar en Postman: File → Import → Seleccionar el archivo JSON
La colección incluye ejemplos de todas las operaciones disponibles.
La API utiliza Laravel Sanctum para autenticación mediante tokens Bearer.
POST /api/auth/register
Content-Type: application/json
{
"name": "Admin User",
"email": "admin@example.com",
"password": "password123",
"password_confirmation": "password123"
}POST /api/auth/login
Content-Type: application/json
{
"email": "admin@example.com",
"password": "password123"
}Respuesta:
{
"success": true,
"message": "Inicio de sesión exitoso",
"data": {
"user": {
"id": 1,
"name": "Admin",
"email": "admin@example.com",
"email_verified_at": null,
"created_at": "xxxxxxxxxxxxxxx",
"updated_at": "xxxxxxxxxxxxxxx"
},
"access_token": "1|xxxxxxxxxxxxxxx",
"token_type": "Bearer"
}
}Incluir el token en el header Authorization de todas las peticiones protegidas:
Authorization: Bearer 1|xxxxxxxxxxxxxxxxxxxxx
GET /api/students- Listar todos los estudiantesPOST /api/students- Crear un estudianteGET /api/students/{id}- Ver un estudiante específicoPUT /api/students/{id}- Actualizar un estudianteDELETE /api/students/{id}- Eliminar un estudiante
GET /api/courses- Listar todos los cursosPOST /api/courses- Crear un cursoGET /api/courses/{id}- Ver un curso específicoPUT /api/courses/{id}- Actualizar un cursoDELETE /api/courses/{id}- Eliminar un curso
POST /api/enrollments- Inscribir un estudiante en un cursoGET /api/enrollments?student_id={id}- Listar cursos de un estudianteGET /api/enrollments?course_id={id}- Listar estudiantes de un cursoDELETE /api/enrollments/{id}- Eliminar una inscripción
POST /api/students
Authorization: Bearer {token}
Content-Type: application/json
{
"name": "Juan Pérez",
"email": "juan@example.com",
"birthdate": "2000-05-15",
"nationality": "Paraguaya"
}POST /api/courses
Authorization: Bearer {token}
Content-Type: application/json
{
"title": "Laravel Avanzado",
"description": "Curso completo de Laravel",
"start_date": "2026-01-15",
"end_date": "2026-03-15"
}POST /api/enrollments
Authorization: Bearer {token}
Content-Type: application/json
{
"student_id": 1,
"course_id": 1
}Ejecutar las pruebas automatizadas:
php artisan testEl seeder crea automáticamente:
- 1 usuario administrador (admin@example.com / password123)
- 3 estudiantes de ejemplo
- 3 cursos de ejemplo
- Inscripciones de ejemplo
Todas las respuestas de la API siguen el formato:
Éxito:
{
"success": true,
"message": "Mensaje descriptivo",
"data": { ... }
}Error:
{
"success": false,
"message": "Mensaje de error",
"errors": { ... }
}Este proyecto es de código abierto bajo la licencia MIT.