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és | Django | Flask | FastAPI |
|---|---|---|---|
| Philosophie de conception | Batteries incluses | Micro-framework, extensible à la demande | Haute performance, axé sur les types |
| Prise en charge de l'asynchrone | Pris en charge à partir de 3.1+ | Aucun support natif | async/await natif |
| Documentation de l'API | Nécessite drf-spectacular | Nécessite Flasgger | Génération automatique de Swagger UI |
| Validation des données | Django Forms / DRF Serializer | Flask-WTF / manuel | Pydantic (intégré) |
| Server | WSGI(Gunicorn) | WSGI(Gunicorn) | ASGI(Uvicorn) |
| Sûreté de typage | Optional | Optional | Annotations 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
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