Application web FastAPI

Ce chapitre vous guide de zéro pour créer votre première application Web avec FastAPI et découvrir la documentation API générée automatiquement.


Différences de positionnement entre FastAPI et Django/Flask

FastAPI est une étoile montante parmi les frameworks web Python, positionné entre Django et Flask.

FonctionnalitésDjangoFlaskFastAPI
Philosophie de conceptionBatteries inclusesMicro-framework, extensible à la demandeHaute performance, axé sur les types
Prise en charge de l'asynchronePris en charge à partir de 3.1+Aucun support natifasync/await natif
Documentation de l'APINécessite drf-spectacularNécessite FlasggerGénération automatique de Swagger UI
Validation des donnéesDjango Forms / DRF SerializerFlask-WTF / manuelPydantic (intégré)
ServerWSGI(Gunicorn)WSGI(Gunicorn)ASGI(Uvicorn)
Sûreté de typageOptionalOptionalAnnotations de type Python imposées

La plus grande différence de FastAPI :Tout piloter avec des annotations de type Python— validation automatique des paramètres de route, sérialisation automatique des requêtes/réponses et génération automatique de documentation interactive.


Préparation de l’environnement

$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install fastapi uvicorn jinja2 python-multipart

Explication des trois dépendances principales :

  • fastapi: Le framework web lui-même
  • uvicorn: serveur ASGI (équivalent à Gunicorn pour Flask)
  • jinja2: moteur de templates (facultatif, mais requis pour le SSR)

Application minimale FastAPI

Exemple

# Chemin du fichier : main.py
from fastapi import FastAPI

# Créer une instance FastAPI
app = FastAPI(
    title="EXEMPLE blog",
    description="Un site de blog personnel construit avec FastAPI",
    version="1.0.0"
)

@app.get("/")           # Décorateur de route pour requête GET
def index():
    """Page d'accueil"""
    return {"message": "Bienvenue sur le blog EXAMPLE"}

@app.get("/hello/{name}")   # Paramètre de chemin {name}
def hello(name: str):       # FastAPI valide automatiquement en fonction des annotations de type
    return {"greeting": f"Bonjour, {name} !"}

Démarrer le serveur

(venv) $ uvicorn main:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000

Notez que la méthode de démarrage est différente de Flask :

  • Flask:flask run(basé sur Werkzeug)
  • FastAPI:uvicorn main:app(Basé sur ASGI, prend en charge nativement async)

Documentation API générée automatiquement

C'est la fonctionnalité la plus incroyable de FastAPI —Générer automatiquement une documentation interactive sans écrire de code supplémentaire。

Visiter/docsVous verrez Swagger UI, où vous pouvez tester l'API directement sur la page :

http://127.0.0.1:8000/docs      # Swagger UI(交互式测试)
http://127.0.0.1:8000/redoc     # ReDoc(只读文档,更美观)

Dans Swagger UI Medium : Cliquez sur GET /hello/{name} → Essayez-le → Saisissez le nom → Exécutez, Juste pour voir la vraie réponse.


Planification de la structure des répertoires du projet

blog_project/
├── main.py               # 应用入口
├── models.py             # SQLAlchemy ORM 模型
├── schemas.py            # Pydantic Schema(FastAPI 独有)
├── database.py           # 数据库连接与 Session
├── auth.py               # JWT 认证逻辑
├── routers/              # APIRouter 路由模块
│   ├── posts.py
│   ├── categories.py
│   ├── users.py
│   └── favorites.py
├── templates/            # Jinja2 模板
├── static/               # 静态文件
└── alembic/              # 数据库迁移

Flask utilise Blueprint pour organiser les routes, FastAPI utiliseAPIRouter. Le concept est similaire mais la syntaxe diffère, et APIRouter est nativement accompagné de contraintes de type.


Résumé du chapitre

Dans ce chapitre, vous avez accompli trois choses : installé FastAPI + Uvicorn, écrit votre première route avec des annotations de type, et visité la documentation API interactive /docs générée automatiquement.

À retenir : FastAPI utilise les annotations de type Python pour piloter la validation des paramètres et la génération de documentation. C'est sa caractéristique la plus fondamentale qui le distingue de Django/Flask.

autres extensions