Déployer une API FastAPI

2 min de lecture07 novembre 2026

FastAPI s'appuie sur ASGI et Uvicorn pour servir une API asynchrone, avec validation des données et documentation générée. Sur l'hébergement d'applications, le déploiement se résume à un point d'entrée qui lit PORT, écoute sur 0.0.0.0 et démarre Uvicorn sans mode rechargement.

Application

Python
import os
import uvicorn
from fastapi import FastAPI

app = FastAPI(title="API exemple")

@app.get("/health")
def health():
    return {"status": "ok"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=int(os.environ.get("PORT", "8000")))

La syntaxe str | None demande Python 3.10 ou plus récent. Sur Python 3.9, utilisez Optional[str] importé depuis typing.

requirements.txt :

Texte
fastapi==0.115.0
uvicorn[standard]==0.30.6

Lancer Uvicorn

uvicorn.run(app, ...) fonctionne avec l'objet application. Si vous utilisez la ligne de commande, passez une chaîne d'import :

Bash
uvicorn main:app --host 0.0.0.0 --port $PORT

N'activez pas --reload en production : le rechargement surveille les fichiers, consomme de la mémoire et redémarre le processus à chaque modification. Pour plusieurs workers, utilisez la forme avec chaîne d'import et --workers ; chaque worker est un processus séparé.

Documentation et validation

FastAPI expose /docs, /redoc et /openapi.json. Utile en développement, parfois indésirable en production : désactivez-les avec FastAPI(docs_url=None, redoc_url=None) si l'API n'est pas publique, ou protégez-les par authentification.

Les modèles Pydantic valident les entrées et documentent le contrat. Un champ manquant renvoie 422 avec le détail, ce qui est préférable à une erreur 500. Utilisez response_model pour éviter de renvoyer des champs internes comme un hash de mot de passe.

Sécurité et robustesse

  • Limitez la taille des corps et le nombre de champs.
  • Validez les types avant d'atteindre la base.
  • Configurez CORS avec des origines explicites, pas * avec des identifiants.
  • Journalisez les erreurs sans exposer la pile au client.
  • Fermez les connexions (base, client HTTP) à l'arrêt.

Vérifier

Bash
curl -i http://ADRESSE_FOURNIE:PORT/health
curl -i http://ADRESSE_FOURNIE:PORT/items/42
curl -i http://ADRESSE_FOURNIE:PORT/items/abc

Attendez 200 pour /health et /items/42, 422 pour /items/abc. Le journal doit afficher Uvicorn running on http://0.0.0.0:PORT. Si le processus démarre mais que la requête échoue, vérifiez l'interface et le port avant les routes.

Adapter la commande de démarrage

Dans le panneau, remplacez la commande par uvicorn main:app --host 0.0.0.0 --port $PORT. Si l'offre limite la mémoire, restez à un seul worker : chaque worker Uvicorn charge une copie complète de l'application. Pour une charge réelle, mesurez d'abord la mémoire disponible et la consommation au repos avant d'augmenter --workers. Après le redémarrage, vérifiez la route /health et la présence de Uvicorn running dans les logs.

Publicité

Cet article vous a-t-il aidé ?

À lire aussi