Skip to content

Ejemplo Demostrativo de un Servicio RestAPI que permite gestionar Estudiantes y Cursos usando Laravel

Notifications You must be signed in to change notification settings

apatuka/cursos-api

Repository files navigation

Cursos API – Plataforma de Cursos Online (Laravel 12)

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

📋 Requisitos

  • PHP 8.1 o superior
  • Composer 2.x
  • MariaDB (o MySQL compatible)
  • Extensiones PHP recomendadas:
    • pdo_mysql
    • mbstring
    • openssl
    • intl
    • tokenizer
    • xml
    • curl

Opcional (solo para desarrollo):

  • Node.js + npm (si se usan assets frontend, no requerido para esta API)
  • Postman/Insomnia para probar la API

🚀 Instalación

1. Clonar el repositorio

git clone https://github.com/USUARIO/cursos-api.git
cd cursos-api

Reemplazar USUARIO por tu usuario de GitHub.

2. Instalar dependencias de PHP

composer install

3. Crear archivo .env

Copiar el archivo de ejemplo:

cp .env.example .env

Editar .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=secret

Ajustar DB_DATABASE, DB_USERNAME, DB_PASSWORD según tu entorno (XAMPP, Laragon, etc).

4. Generar clave de la aplicación

php artisan key:generate

5. Migrar la base de datos

Este comando crea todas las tablas necesarias:

php artisan migrate

Si querés recrear la base de datos desde cero:

php artisan migrate:fresh

6. Datos de prueba (opcional)

Si el proyecto incluye seeders, podés cargar datos de ejemplo con:

php artisan migrate:fresh --seed

Además, se incluye un dump SQL de ejemplo:

  • database/dump_cursos_api.sql

Podés importarlo manualmente en MariaDB si lo preferís.


▶️ Ejecutar el servidor de desarrollo

php artisan serve

Por defecto la API quedará disponible en:

http://localhost:8000

🔐 Autenticación (Laravel Sanctum)

La API usa tokens personales de Laravel Sanctum.

1. Registrar usuario admin

Endpoint

POST /api/v1/auth/register

Body JSON

{
  "name": "Admin User",
  "email": "admin@example.com",
  "password": "password123"
}

2. Login y obtención del token

POST /api/v1/auth/login

Body JSON

{
  "email": "admin@example.com",
  "password": "password123"
}

Respuesta esperada

{
  "token": "e098478a2c..."
}

3. Uso del token en las peticiones protegidas

Agregar el header:

Authorization: Bearer {token}

Ejemplo:

GET /api/v1/students
Authorization: Bearer e098478a2c...

📚 Endpoints

Todos los endpoints están bajo el prefijo:

/api/v1

y requieren autenticación (excepto auth/register y auth/login).


1. Autenticación

POST /api/v1/auth/register

Registrar usuario admin (simple).

POST /api/v1/auth/login

Login y generación de token.


2. Estudiantes (students)

GET /api/v1/students

Lista de estudiantes (con filtros y paginación).

Query params opcionales:

  • search – busca por name o email
  • nationality – filtra por nacionalidad exacta
  • sort_byid, name, email, birthdate
  • sort_dirasc | desc
  • per_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=asc

GET /api/v1/students/{id}

Ver detalles de un estudiante.

POST /api/v1/students

Crear estudiante.

Body JSON:

{
  "name": "John Doe",
  "email": "john.doe@example.com",
  "birthdate": "2000-01-01",
  "nationality": "Paraguayan"
}

PUT /api/v1/students/{id}

Actualizar estudiante.

{
  "name": "John Doe Updated",
  "nationality": "Argentinian"
}

DELETE /api/v1/students/{id}

Eliminar estudiante.


3. Cursos (courses)

GET /api/v1/courses

Lista de cursos.

Query params opcionales:

  • title – filtro por título (LIKE)
  • start_date_from – fecha de inicio desde
  • start_date_to – fecha de inicio hasta
  • sort_byid, title, start_date, end_date
  • sort_dirasc | desc
  • per_page – cantidad por página

GET /api/v1/courses/{id}

Ver detalles de un curso.

POST /api/v1/courses

Crear curso.

{
  "title": "Introducción a PHP",
  "description": "Curso básico de PHP.",
  "start_date": "2025-01-01",
  "end_date": "2025-02-01"
}

PUT /api/v1/courses/{id}

Actualizar curso.

{
  "title": "Introducción a PHP (Actualizado)",
  "description": "Curso básico de PHP actualizado."
}

DELETE /api/v1/courses/{id}

Eliminar curso.


4. Inscripciones (enrollments)

POST /api/v1/enrollments

Inscribir estudiante en un curso.

{
  "student_id": 1,
  "course_id": 1
}

Responde con el objeto de inscripción creado.

GET /api/v1/enrollments?student_id={id}

Lista de cursos en los que está inscrito un estudiante.

GET /api/v1/enrollments?course_id={id}

Lista de estudiantes inscritos en un curso.

DELETE /api/v1/enrollments/{id}

Eliminar inscripción.


🧪 Tests

El proyecto usa PHPUnit.

Ejecutar todos los tests:

php artisan test

Los 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

🧾 Dump SQL

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.sql

🧰 Colección Postman

En la raíz del proyecto se incluye una colección Postman:

  • postman/cursos-api.postman_collection.json

Uso

  1. Abrir Postman.
  2. Clic en Import.
  3. Seleccionar cursos-api.postman_collection.json.
  4. Revisar la variable base_url (por defecto http://localhost:8000).
  5. Ejecutar:
    • Auth / Register
    • Auth / Login (guarda el token en la variable token).
    • Luego probar las requests de Students, Courses, Enrollments.

📐 Estándares y buenas prácticas

  • 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:
    • StudentCourse (many-to-many a través de Enrollment).

📄 Licencia

Este proyecto puede utilizarse como base para evaluaciones técnicas, pruebas o proyectos educativos.

About

Ejemplo Demostrativo de un Servicio RestAPI que permite gestionar Estudiantes y Cursos usando Laravel

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages