Les routes (endpoints Fast API)
Dans FastAPI, une route est l’URL que votre application expose et à laquelle les clients (navigateurs, applications mobiles, ou autres services) peuvent envoyer des requêtes.
Chaque route correspond généralement à une fonction Python qui traite la requête et renvoie une réponse.
-
Route = URL
-
Endpoint = la fonction Python qui gère la route
-
Méthode HTTP = le type de requête que la route accepte (GET, POST, PUT, DELETE…)
Comment ça fonctionne ?
FastAPI utilise des décorateurs comme @app.get()
, @app.post()
, @app.put()
, @app.delete()
pour lier une URL à une fonction.
Quand un client envoie une requête à cette URL, FastAPI appelle la fonction correspondante.
La fonction retourne une réponse HTTP, qui peut être du texte, du JSON ou même un rendu HTML.
Exemple conceptuel (sans code concret)
-
URL : /users
-
Fonction Python : récupère la liste des utilisateurs depuis la base de données
-
Méthode HTTP : GET
-
Réponse : JSON contenant la liste des utilisateurs
Ici, l’endpoint /users
est associé à une fonction qui définit la logique pour cette route.
Méthodes HTTP et endpoints
Chaque route peut accepter une ou plusieurs méthodes HTTP :
-
GET : récupérer des données
-
POST : créer une nouvelle ressource
-
PUT / PATCH : mettre à jour une ressource
-
DELETE : supprimer une ressource
Pourquoi c’est important :
-
Permet de structurer l’API de manière RESTful
-
Chaque action a sa propre route ou sa propre méthode sur la même route
-
Facilite la maintenance et la compréhension de l’API
Variables dans les routes
FastAPI permet de définir des routes dynamiques avec des variables dans l’URL :
Exemple conceptuel : /users/{id}
-
{id}
est une variable capturée par FastAPI et transmise à la fonction Python -
Cela permet de récupérer, modifier ou supprimer un utilisateur spécifique
Avantage pédagogique :
-
La même fonction peut gérer plusieurs ressources selon la valeur de la variable
-
Les routes restent claires et lisibles pour les développeurs
Retour d’une route
Une fonction associée à une route retourne généralement :
-
Une réponse JSON pour une API
-
Un code HTTP pour indiquer le succès ou l’échec (200, 201, 404…)
-
Optionnellement, des en-têtes pour préciser le type de contenu ou gérer la sécurité
Pourquoi c’est fondamental :
-
Chaque route devient un point de communication clair avec les clients
-
Permet aux applications clientes de comprendre le résultat de la requête
-
Facilite le débogage et le suivi du fonctionnement de l’API
Bonnes pratiques pour les routes FastAPI
-
Nom clair et RESTful :
/users
pour la collection,/users/{id}
pour un élément précis -
Séparer les méthodes HTTP : éviter de mélanger GET, POST, DELETE dans la même fonction
-
Validation des paramètres : FastAPI propose la validation automatique des types (int, str, etc.) et des données complexes
-
Gestion des erreurs : renvoyer des codes HTTP adaptés et des messages explicites
-
Documentation : FastAPI génère automatiquement une documentation Swagger/OpenAPI pour chaque endpoint
En résumé, dans FastAPI :
-
Une route est l’URL accessible par le client
-
Un endpoint est la fonction Python qui traite la requête
-
Les méthodes HTTP déterminent le type d’action
-
Les variables dans l’URL permettent de rendre les endpoints dynamiques
-
Une réponse claire et structurée (JSON + code HTTP) est essentielle pour une API maintenable
Fonctions :
-
Routes FastAPI (exemple)
Exemple de code :
from fastapi import FastAPI from pydantic import BaseModel # 1️⃣ Création de l'application FastAPI app = FastAPI() # 2️⃣ Route principale (GET) @app.get("/") def read_root(): return {"message": "Bienvenue sur la page d'accueil !"} # 3️⃣ Route avec paramètre dynamique @app.get("/user/{username}") def read_user(username: str): return {"message": f"Bonjour, {username} !"} # 4️⃣ Route avec paramètre numérique @app.get("/post/{post_id}") def read_post(post_id: int): return {"post_id": post_id, "message": f"Vous consultez l'article #{post_id}"} # 5️⃣ Route POST avec modèle de données class Item(BaseModel): name: str price: float description: str = None @app.post("/items/") def create_item(item: Item): return {"message": "Article créé avec succès", "item": item}
Explication du code :
from fastapi import FastAPI
importe la classe FastAPI, qui permet de créer l’application web ou API en Python.from pydantic import BaseModel
importe BaseModel de Pydantic, utilisé pour définir et valider des modèles de données.app = FastAPI()
crée une instance de l’application FastAPI.Route principale (GET)
@app.get("/")
définit une route accessible via une requête GET à http://127.0.0.1:8000/.
def read_root():
définit la fonction exécutée quand cette route est visitée.
return {"message": "Bienvenue sur la page d'accueil !"}
renvoie un dictionnaire JSON comme réponse.Route avec paramètre dynamique (chaîne)
@app.get("/user/{username}")
capture une valeur dans l’URL (exemple : /user/Alice).
username: str
précise que le paramètre est une chaîne de caractères.
return {"message": f"Bonjour, {username} !"}
renvoie une réponse personnalisée selon le nom fourni dans l’URL.Route avec paramètre numérique
@app.get("/post/{post_id}")
définit une route qui prend un entier dans l’URL (exemple : /post/42).
post_id: int
précise que le paramètre doit être un entier.
return {"post_id": post_id, "message": f"Vous consultez l'article #{post_id}"}
renvoie un dictionnaire JSON incluant le numéro de l’article et un message.Route POST avec modèle de données
class Item(BaseModel):
crée un modèle de données avec Pydantic.
Les attributsname: str
,price: float
, etdescription: str = None
définissent les champs attendus et leur type.
@app.post("/items/")
définit une route POST pour créer un nouvel objet.
def create_item(item: Item):
récupère automatiquement les données JSON envoyées dans la requête et les transforme en objetItem
.
return {"message": "Article créé avec succès", "item": item}
renvoie la confirmation de création et les données reçues.