Premiers pas avec FastAPI
Assez consommé : passons derrière le comptoir. Dans ce chapitre, on construit une API en Python avec FastAPI. C'est un framework « tout compris » : à partir de vos fonctions et de leurs types, il gère la validation des données (avec Pydantic) et génère tout seul le contrat OpenAPI et la documentation.
Installation
On crée un dossier pour le projet et un environnement virtuel (.venv) : les bibliothèques s'installent dedans, pas dans le Python du système. Choisissez votre système.
Windows (PowerShell)
mkdir mon-api; cd mon-api
py -m venv .venv
.venv\Scripts\Activate.ps1
pip install "fastapi[standard]"
Si Activate.ps1 est refusé (« l'exécution de scripts est désactivée »), lancez une fois Set-ExecutionPolicy -Scope CurrentUser RemoteSigned, puis réessayez. Dans l'invite de commandes classique (cmd), activez avec .venv\Scripts\activate.bat.
macOS
mkdir mon-api && cd mon-api
python3 -m venv .venv
source .venv/bin/activate
pip install "fastapi[standard]"
Si macOS propose d'installer les « outils de ligne de commande » au premier python3, acceptez, puis relancez la commande.
Linux
mkdir mon-api && cd mon-api
python3 -m venv .venv
source .venv/bin/activate
pip install "fastapi[standard]"
Sous Ubuntu/Debian, si python3 -m venv affiche « ensurepip is not available » : sudo apt install python3-venv, supprimez le dossier .venv raté (rm -rf .venv), puis recommencez.
Une fois l'environnement activé, l'invite commence par (.venv). Il faut le réactiver dans chaque nouveau terminal. Si fastapi : commande introuvable, ou si pip répond externally-managed-environment, c'est que l'environnement n'est pas activé.
Premier endpoint
# main.py
from fastapi import FastAPI
app = FastAPI(title="Mon API")
@app.get("/v1/health")
def health():
return {"status": "ok"}
Lancer le serveur
# Sur le port 8000, redémarre à chaque modification du code
fastapi dev main.py
Et on teste, évidemment, avec curl :
curl -i http://localhost:8000/v1/health
HTTP/1.1 200 OK
Content-Type: application/json
{"status":"ok"}
Le bonus de FastAPI
Ouvrez http://localhost:8000/docs : FastAPI a déjà généré le contrat OpenAPI et une documentation Swagger UI. Le contrat brut est sur /openapi.json, et une version Redoc sur /redoc.
Ce contrat généré est pratique, mais il décrit ce que fait le code, pas ce que le client attend. Le vôtre, vous l'avez écrit avant le code… n'est-ce pas ?