Guide Expert : Créer une API REST Professionnelle avec FastAPI, PostgreSQL et Docker Passer d'un prototype à une API prête pour la production demande de la rigueur : gestion des migrations, asynchronisme, conteneurisation et sécurité renforcée. Ce guide détaille l'approche utilisée par les experts pour bâtir des systèmes scalables. 1. Architecture Modulaire (Pattern Repository) Pour maintenir un code propre, nous séparons les responsabilités. Ne mélangez jamais vos requêtes SQL avec vos routes API. Schemas (Pydantic) : Validation des données d'entrée/sortie. Models (SQLAlchemy) : Définition des tables de la base de données. Repository : Logique d'accès aux données (CRUD). Routers : Points d'entrée (Endpoints) de l'API. 2. Performance : L'Asynchronisme avec SQLAlchemy 2.0 FastAPI brille par sa gestion de l'asynchrone. Utilisez asyncpg pour des performances optimales avec PostgreSQL. from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker DATABASE_URL = "postgresql+asyncpg://user:pass@db:5432/dbname" engine = create_async_engine(DATABASE_URL, echo=False) AsyncSessionLocal = async_sessionmaker(engine, expire_on_commit=False, class_=AsyncSession) # Dépendance injectée dans les routes async def get_db(): async with AsyncSessionLocal() as session: yield session 3. Gestion des Migrations avec Alembic En production, modifier manuellement votre base de données est proscrit. Alembic versionne vos schémas. Initialisation : alembic init migrations Génération automatique : Alembic compare vos modèles Python à votre base de données. alembic revision --autogenerate -m "Initialisation" Application : alembic upgrade head Note : Cela permet de revenir en arrière (rollback) instantanément en cas d'erreur de schéma. 4. Conteneurisation avec Docker & Orchestration L'utilisation de Docker Compose garantit que votre API fonctionne exactement de la même manière en développement et en production. Fichier docker-compose.yml version: '3.8' services: db: image: postgres:15-alpine environment: POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data api: build: . command: sh -c "alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4" env_file: - .env depends_on: - db volumes: postgres_data: 5. Sécurité : JWT et Hachage Argon2 Ne stockez jamais de mots de passe en clair. Utilisez Argon2 ou Bcrypt. Pour l'authentification, le flux OAuth2 avec jeton JWT est la norme. Rotation des clés : Utilisez des variables d'environnement pour vos SECRET_KEY. Expiration : Limitez la durée de vie des tokens (ex: 30 minutes) et utilisez des Refresh Tokens pour la persistance. 6. Bonnes Pratiques de Production Concept Solution Pro Gestion d'erreurs Handler global pour renvoyer du JSON uniforme. Validation Pydantic V2 pour des performances de parsing 10x plus rapides. Reverse Proxy Nginx ou Traefik pour le SSL (HTTPS) et le Load Balancing. Conclusion Développer une API avec FastAPI et PostgreSQL ne se limite pas à écrire quelques routes. En intégrant Alembic pour vos données et Docker pour votre infrastructure, vous créez une base solide, maintenable et prête pour la mise à l'échelle. Chez Akamasoft, nous appliquons ces standards pour garantir la robustesse des solutions digitales de nos partenaires.