Esta es una API RESTful construida con Laravel 11, diseñada para gestionar una colección de libros. Implementa buenas prácticas de desarrollo como el principio de responsabilidad única (SRP) y está basada en pruebas, incluyendo tanto pruebas de características (feature tests) como pruebas unitarias (unit tests).
- 🎯 Requisitos
- ⚙️ Instalación
- 🛠️ Configuración
- 📋 Migraciones
- 🛤️ Rutas de la API
- 🛡️ Validación
- 🧪 Pruebas
- 📜 Licencia
- 🐘 PHP 8.2.14 o superior
- 📦 Composer
- 🌐 Laravel 11
- 🗄️ MySQL o SQLite
-
Clona el repositorio:
git clone https://github.com/StevenU21/API-RESTfull cd API-RESTfull
-
Instala las dependencias de Composer:
composer install
-
Copia el archivo de entorno y configura tus variables de entorno:
cp .env.example .env
-
Genera la clave de la aplicación:
php artisan key:generate
Configura tu base de datos en el archivo .env
:
DB_CONNECTION=mysql / sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nombre_de_tu_base_de_datos
DB_USERNAME=tu_usuario
DB_PASSWORD=tu_contraseña
Ejecuta las migraciones para crear las tablas necesarias:
php artisan migrate
php artisan migrate:fresh --seed
Las siguientes rutas están disponibles en esta API:
-
🔍 Buscar libros:
GET /api/books/search
-
📚 CRUD de libros:
GET /api/books POST /api/books GET /api/books/{id} PUT /api/books/{id} DELETE /api/books/{id}
public function up(): void
{
Schema::create('books', function (Blueprint $table) {
$table->increments('id');
$table->string('title', 60)->unique();
$table->string('author', 30);
$table->string('genre', 20);
$table->date('publication_year');
$table->text('description', 300);
$table->float('rate')->default(0);
$table->integer('likes')->default(0);
$table->timestamps();
});
}
Las reglas de validación para los libros son las siguientes:
public function rules(): array
{
return [
'title' => ['required', 'min:6', 'max:60', 'unique:books,title,except,id'],
'author' => ['required', 'min:3', 'max:30'],
'genre' => ['required', 'min:6', 'max:20'],
'publication_year' => ['required', 'date'],
'description' => ['required', 'min:3', 'max:300'],
'rate' => ['numeric'],
'likes' => ['numeric']
];
}
Este proyecto incluye tanto pruebas de características como pruebas unitarias para asegurar la calidad y funcionalidad del código.
DeleteBooksTest
GetBooksTest
SearchBooksTest
ShowBooksTest
StoreBooksTest
UpdateBooksTest
BookRequestTest
Para ejecutar las pruebas, usa el siguiente comando:
php artisan test
Este proyecto está licenciado bajo la MIT License.