Objectif
Construire une API REST complÚte de gestion de produits avec FastAPI, Pydantic v2 et une persistance en mémoire. L'API doit exposer la documentation interactive automatique sur /docs.
Compétences travaillées : Pydantic BaseModel, field_validator, response_model, pagination, HTTPException, Depends(), lifespan.
Spécifications
| Endpoint | Méthode | Description | Codes |
|---|---|---|---|
/produits | GET | Liste paginée (page, limit, category) | 200 |
/produits | POST | Créer un produit (validation Pydantic) | 201, 422 |
/produits/{id} | GET | Récupérer un produit | 200, 404 |
/produits/{id} | PUT | Mettre Ă jour un produit | 200, 404 |
/produits/{id} | DELETE | Supprimer un produit | 204, 404 |
/health | GET | Vérification santé API | 200 |
Structure du projet
03-fastapi-bases/mini-projet/solution/
âââ main.py # Application FastAPI + routes
âââ schemas.py # Pydantic models (Create, Update, Response)
âââ requirements.txt # DĂ©pendances
Ătapes
- Créez le virtualenv :
python -m venv venv && source venv/bin/activate - Installez les dépendances :
pip install -r requirements.txt - Implémentez
schemas.pyavecProductCreate,ProductUpdate,ProductResponse,PaginatedResponse[T] - Implémentez
main.pyavec toutes les routes CRUD - Lancez :
uvicorn main:app --reload - Testez sur
http://localhost:8000/docs
Tests API (curl)
# Créer un produit
curl -X POST http://localhost:8000/produits \
-H "Content-Type: application/json" \
-d '{"name":"laptop","price":999.99,"stock":5,"category":"electronique"}'
# Lister avec pagination
curl "http://localhost:8000/produits?page=1&limit=10&category=electronique"
# Récupérer par id
curl http://localhost:8000/produits/1
# Mettre Ă jour
curl -X PUT http://localhost:8000/produits/1 \
-H "Content-Type: application/json" \
-d '{"price":899.99,"stock":3}'
# Supprimer
curl -X DELETE http://localhost:8000/produits/1