Library API — Gestion de Bibliothèque

Objectif
Créer une API REST avec FastAPI pour gérer une bibliothèque personnelle : livres, auteurs, genres, amis, prêts, et upload d’images de couverture, avec stockage dans une base SQLite.
Fonctionnalités principales
Livres
- Créer un livre complet (édition, auteurs, genres, exemplaire)
- Lister les livres
- Voir le détail d’un livre
- Uploader une image de couverture
Auteurs & Genres
- Créer des auteurs
- Créer des genres
- Associer auteur livre
- Associer genre livre
Amis
- Ajouter un ami
- Lister les amis
Prêts (Loans)
- Créer un prêt
- Voir les prêts en cours
- Retourner un livre
- Vérifier les contraintes (exemplaire existant, ami existant, exemplaire disponible)
Technologies utilisées
- Python 3
- FastAPI
- SQLite
- Pydantic
- Uvicorn
- CORS Middleware
- Static Files (servir les images)
Structure du projet
project/ │ ├── main.py ├── models/ │ └── models.py ├── library.db ├── images/ └── README.md
Démarrage rapide
Installation
git clone https://gitlab.com/<your-repo>
cd project
pip install fastapi uvicorn
Lancement
uvicorn main:app --reload
Documentation automatique
- Swagger UI : http://127.0.0.1:8000/docs
Exemple d’endpoint (FastAPI)
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class BookCreate(BaseModel):
title: str
author: str
@app.post("/books")
def create_book(book: BookCreate):
return {"message": "Book created", "book": book}
Base de données (SQLite)
La base utilise SQLite avec des relations (exemples) : - livre, auteur, genre, edition, editeur, exemplaire, ami, pret
Les clés étrangères sont activées avec :
PRAGMA foreign_keys = ON;
Upload d’images (couvertures)
Endpoint :
- POST /livres/{livre_id}/images
Formats supportés : - jpg, jpeg, png, webp
Les images sont accessibles via :
- /images/<filename>
Exemple (FastAPI) :
from fastapi import UploadFile, File
@app.post("/livres/{livre_id}/images")
async def upload_cover(livre_id: int, file: UploadFile = File(...)):
return {"livre_id": livre_id, "filename": file.filename}
Ce que j’ai appris
- Concevoir une API REST (routes + validation Pydantic)
- Modéliser une base relationnelle SQLite (relations + clés étrangères)
- Gérer des erreurs et des contraintes métier (disponibilité, existence)
- Faire des transactions SQL propres
- Uploader et servir des fichiers statiques (images)
- Structurer un backend (architecture logique)
Améliorations possibles
- Authentification utilisateurs (JWT)
- Pagination / filtres
- Dockerisation
- Frontend React
- Tests automatisés (pytest)
Liens
-
Dépôt GitLab :
https://gitlab.com/ahmad-training-2026/bibliotheque/-/tree/main?ref_type=heads -
Portfolio :
https://ahmadaboalola.com/
Auteur
Ahmad Abo-Alola — Student Project (AI Developer Training)