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

EndpointMéthodeDescriptionCodes
/produitsGETListe paginée (page, limit, category)200
/produitsPOSTCréer un produit (validation Pydantic)201, 422
/produits/{id}GETRécupérer un produit200, 404
/produits/{id}PUTMettre Ă  jour un produit200, 404
/produits/{id}DELETESupprimer un produit204, 404
/healthGETVérification santé API200

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

  1. Créez le virtualenv : python -m venv venv && source venv/bin/activate
  2. Installez les dépendances : pip install -r requirements.txt
  3. Implémentez schemas.py avec ProductCreate, ProductUpdate, ProductResponse, PaginatedResponse[T]
  4. Implémentez main.py avec toutes les routes CRUD
  5. Lancez : uvicorn main:app --reload
  6. 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
← Retour au cours 🧠 QCM Module 03 Module 04 — SQLAlchemy →