Code-first ou design-first
Le contrat et le code doivent dire la même chose. Mais lequel écrit-on en premier ?
Code-first
On écrit le code, et le contrat est généré à partir de lui (annotations, types, décorateurs…).
C'est ce que fait FastAPI : les types Python et les modèles Pydantic suffisent à produire un contrat OpenAPI complet, disponible sur /openapi.json, avec sa documentation sur /docs.
from fastapi import FastAPI
from pydantic import BaseModel, Field
app = FastAPI(title="API-ritif")
class ReviewCreate(BaseModel):
rating: int = Field(ge=1, le=5)
comment: str | None = Field(default=None, max_length=500)
@app.post("/v1/cocktails/{cocktail_id}/reviews", status_code=201)
def create_review(cocktail_id: int, review: ReviewCreate):
...
Rien d'autre à écrire : rating apparaît dans le contrat comme un entier entre 1 et 5.
- ✅ Le contrat est toujours synchronisé avec le code.
- ✅ Rapide pour démarrer.
- ❌ Le contrat n'existe qu'une fois le code écrit : le front attend le back.
- ❌ La conception de l'API est guidée par l'implémentation, pas par les besoins du client.
Tous les frameworks n'en sont pas capables : Flask ou Express (JavaScript) ne connaissent pas les types des données. Il faut ajouter des bibliothèques et des commentaires spéciaux, souvent oubliés lors des modifications.
Design-first
On écrit d'abord le contrat, on le fait valider par ceux qui vont l'utiliser, puis on code.
- ✅ On réfléchit à l'API du point de vue de ses clients.
- ✅ Le front et le back travaillent en parallèle : le front utilise un mock généré à partir du contrat (voir chapitre 7).
- ✅ Le contrat sert à générer des tests, des clients, de la validation.
- ❌ Il faut une discipline pour garder le code conforme au contrat.
Des outils vérifient les requêtes et les réponses directement à partir du contrat, par exemple Prism en mode proxy (chapitre 7). Le contrat devient du code exécutable.
Comparatif
| Code-first | Design-first | |
|---|---|---|
| Point de départ | Le code | Le contrat |
| Synchronisation | Automatique | Discipline et outils de validation |
| Travail en parallèle | Difficile | Naturel |
| Adapté à… | Une API interne, une petite équipe, un prototype | Une API publique, plusieurs équipes, des partenaires |
Dans le TP des avis (chapitre 7), le contrat OpenAPI vous est fourni avant le code : c'est du design-first, et c'est lui qui fait foi.