Construire des API robustes avec FastAPI et MongoDB

Apprenez à créer des API rapides avec FastAPI et MongoDB. Guide complet : environnement, création et tests d'endpoints pour applications robustes et évolutives.

Louis Dupont

Louis Dupont

5 June 2025

Construire des API robustes avec FastAPI et MongoDB

Dans le monde actuel axé sur la technologie, la création d'API rapides, efficaces et évolutives est cruciale pour les développeurs. Une combinaison puissante qui gagne en popularité est l'utilisation de FastAPI avec MongoDB. FastAPI, comme son nom l'indique, est un framework web moderne et performant pour la création d'API avec Python 3.7+ qui est rapide à coder et à exécuter. Pendant ce temps, MongoDB est une base de données NoSQL connue pour son évolutivité et sa flexibilité. Ensemble, ils fournissent une solution robuste pour la création d'API capables de gérer n'importe quoi, d'un petit projet à une application à grande échelle.

Alors, pourquoi devriez-vous envisager ce duo pour votre prochain projet ? Plongeons-nous !

Premiers pas : configuration de votre environnement

Avant de commencer à créer notre API, configurons notre environnement. Vous devrez installer Python sur votre système, ainsi que pip pour la gestion des packages.

Framework FastAPI, hautes performances, facile à apprendre, rapide à coder, prêt pour la production

Étape 1 : installer FastAPI et Uvicorn

Tout d'abord, installons FastAPI. Ouvrez votre terminal et exécutez la commande suivante :

pip install fastapi

Ensuite, nous allons installer Uvicorn, une implémentation de serveur ASGI pour Python, qui servira notre application FastAPI :

pip install uvicorn

Étape 2 : installer Motor

Motor est le pilote asynchrone pour MongoDB qui fonctionne de manière transparente avec FastAPI. Pour l'installer, exécutez :

pip install motor

Génial ! Maintenant, nous avons tout ce dont nous avons besoin pour commencer à coder.

Création de votre première application FastAPI

Maintenant, créons une application FastAPI de base et connectons-la à MongoDB.

Étape 1 : initialiser l'application FastAPI

Créez un nouveau fichier Python (appelons-le main.py) et commencez par importer FastAPI et initialiser l'application :

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"message": "Bienvenue dans le tutoriel FastAPI avec MongoDB !"}

Ce code configure une application FastAPI de base avec un seul point de terminaison.

mongoDB official website

Étape 2 : se connecter à MongoDB

Ensuite, connectons notre application FastAPI à MongoDB à l'aide de Motor. Nous allons créer un nouveau fichier appelé database.py pour gérer notre connexion à la base de données.

from motor.motor_asyncio import AsyncIOMotorClient

MONGO_DETAILS = "mongodb://localhost:27017"

client = AsyncIOMotorClient(MONGO_DETAILS)
database = client.mydatabase

Dans cet exemple, nous nous connectons à une instance MongoDB s'exécutant localement. Assurez-vous que MongoDB est installé et en cours d'exécution sur votre système.

Étape 3 : définir les modèles Pydantic

Les modèles Pydantic sont un excellent moyen de définir des structures de données et d'assurer la validation des données dans FastAPI. Créez un fichier models.py :

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str
    price: float
    available: bool = True

Ce modèle définit la structure d'un élément dans notre inventaire.

Création de points de terminaison d'API

Une fois la configuration de base terminée, créons des points de terminaison d'API pour interagir avec notre base de données MongoDB.

Étape 1 : créer la collection d'éléments

Tout d'abord, nous avons besoin d'une collection dans notre base de données MongoDB pour stocker les éléments. Dans main.py, créons un point de terminaison pour ajouter de nouveaux éléments à la base de données :

from fastapi import FastAPI, HTTPException
from database import database
from models import Item
from bson import ObjectId

app = FastAPI()

@app.post("/items/")
async def create_item(item: Item):
    item_dict = item.dict()
    result = await database["items"].insert_one(item_dict)
    item_dict["_id"] = str(result.inserted_id)
    return item_dict

Ce point de terminaison nous permet de créer de nouveaux éléments dans la collection MongoDB. Remarquez comment nous convertissons l'ID inséré en une chaîne pour une meilleure lisibilité.

Étape 2 : récupérer les éléments

Ensuite, nous allons créer un point de terminaison pour récupérer tous les éléments de la base de données :

@app.get("/items/")
async def get_items():
    items = await database["items"].find().to_list(1000)
    for item in items:
        item["_id"] = str(item["_id"])
    return items

Ce point de terminaison récupère tous les éléments de la collection items et convertit leurs ID en chaînes.

Étape 3 : récupérer un seul élément

Pour récupérer un seul élément par son ID, nous allons ajouter un autre point de terminaison :

@app.get("/items/{item_id}")
async def get_item(item_id: str):
    item = await database["items"].find_one({"_id": ObjectId(item_id)})
    if item:
        item["_id"] = str(item["_id"])
        return item
    raise HTTPException(status_code=404, detail="Item not found")

Ce point de terminaison récupère un élément par son ID et le renvoie, ou génère une erreur 404 si l'élément est introuvable.

Étape 4 : mettre à jour un élément

La mise à jour d'un élément est simple avec FastAPI et Motor. Ajoutez le code suivant pour mettre à jour un élément par son ID :

@app.put("/items/{item_id}")
async def update_item(item_id: str, item: Item):
    result = await database["items"].update_one(
        {"_id": ObjectId(item_id)}, {"$set": item.dict()}
    )
    if result.modified_count == 1:
        updated_item = await database["items"].find_one({"_id": ObjectId(item_id)})
        updated_item["_id"] = str(updated_item["_id"])
        return updated_item
    raise HTTPException(status_code=404, detail="Item not found")

Ce point de terminaison met à jour un élément par son ID et renvoie l'élément mis à jour.

Étape 5 : supprimer un élément

Enfin, ajoutons un point de terminaison pour supprimer un élément par son ID :

@app.delete("/items/{item_id}")
async def delete_item(item_id: str):
    result = await database["items"].delete_one({"_id": ObjectId(item_id)})
    if result.deleted_count == 1:
        return {"message": "Item deleted"}
    raise HTTPException(status_code=404, detail="Item not found")

Ce point de terminaison supprime un élément et renvoie un message de réussite ou une erreur 404 si l'élément est introuvable.

Comment se connecter à la base de données MongoDB à Apidog

  1. Cliquez sur "Processors Operation" dans l'API et sélectionnez "Database Operations".
Cliquez sur "Processors Operation" dans l'API et sélectionnez "Database Operations".

2. Cliquez sur "Manage Database Connection" dans la liste déroulante sous "Database Connection", puis cliquez sur le bouton "New" dans le coin supérieur droit.

Cliquez sur "Manage Database Connection"

3. Sélectionnez le type de base de données MongoDB, puis renseignez les informations de connexion correspondantes.

Sélectionnez le type de base de données MongoDB
💡
Apidog attache de l'importance à la sécurité de vos données. L'adresse de la base de données, le port, le nom d'utilisateur, le mot de passe, le nom de la base de données ne sont stockés localement que sur le client et ne seront pas synchronisés avec le cloud. Même au sein de la même équipe, les informations de connexion aux bases de données ne seront pas synchronisées entre les membres. Chaque membre de l'équipe doit configurer manuellement la connexion à la base de données.

Utiliser la base de données MongoDB

MongoDB stocke les données au format de document BSON. Pour la commodité des habitudes d'utilisation de la plupart des utilisateurs, lors de la modification des bases de données MongoDB dans Apidog, soumettez des fichiers au format JSON. Le système mappera automatiquement chaque champ au type de données BSON correspondant en fonction du contenu réel du JSON.

Parmi eux, le champ _id est relativement spécial. Selon les spécifications de MongoDB, chaque document doit avoir un champ _id comme clé primaire, et le type de données par défaut de ce champ est ObjectId plutôt que String.

Si vous devez déclarer un champ _id de type ObjectId, vous pouvez utiliser le format de chaîne conventionnel. Si le contenu de la chaîne est conforme au format ObjectId, Apidog le mappera automatiquement au type ObjectId en BSON.

Supposons qu'il existe un tel document BSON dans MongoDB maintenant :

{    _id: ObjectId('6569a36afcf5ee79c08d2f94'),    name: "Apidog"}

Ainsi, lors de l'utilisation d'Apidog pour interroger le document via _id, la valeur JSON qui doit être saisie dans les "Query Conditions" est :

{    "_id": "6569a36afcf5ee79c08d2f94"  }

Opérations courantes

Pour les opérations CRUD courantes, prise en charge via les opérations d'API visuelles. Pas besoin d'écrire de code JavaScript, il suffit de spécifier l'action dans le "Operation Type", puis de spécifier le "Collection Name", puis d'écrire le contenu correspondant en JSON dans "Query Conditions".

Par exemple, pour l'opération de requête mentionnée ci-dessus, vous pouvez afficher le document interrogé dans la console après avoir entré la commande et activé "Console Log".

écrivez le contenu correspondant en JSON dans "Query Conditions" dans Apidog

Commandes avancées

Si vous avez besoin d'opérations plus avancées, vous pouvez également exécuter directement des commandes de base de données. Dans "Operation Type", sélectionnez "Run Database Command" et entrez ensuite la commande de base de données au format JSON. Notez que la commande de base de données ne fait pas référence aux appels de méthode comme db.collection.findOne(), mais aux données JSON dans un format spécifique.

Par exemple, pour interroger le nombre de documents dans la collection users, vous pouvez utiliser la commande de base de données count :

{    "count": "users"}

Après avoir entré la commande, vous pouvez afficher le résultat dans la console.

Exécuter des commandes de base de données

Test de votre API

Pour tester votre API, vous pouvez utiliser des outils comme Postman ou Apidog. Ces outils vous permettent d'envoyer des requêtes à vos points de terminaison et de voir les réponses, ce qui facilite le débogage et garantit que tout fonctionne correctement.

Utilisation d'Apidog pour les tests

Apidog est un puissant outil de développement et de test d'API qui simplifie le processus de création, de test et de gestion des API. Voici comment vous pouvez utiliser Apidog pour tester votre application FastAPI MongoDB :

  1. Créer un nouveau projet : ouvrez Apidog Client et créez un nouveau projet dans Apidog.
Créer un nouveau projet dans Apidog

2 Ajouter des points de terminaison : ajoutez les points de terminaison que vous avez créés (/items/, /items/{item_id}, etc.) au projet.

Ajouter des points de terminaison dans Apidog

3. Envoyer des requêtes : utilisez l'outil pour envoyer des requêtes GET, POST, PUT et DELETE à vos points de terminaison et observer les réponses.

Envoyer des requêtes dans Apidog

4. Valider les réponses : assurez-vous que les réponses correspondent aux sorties attendues et utilisez les messages d'erreur détaillés pour corriger tout problème.

Valider les réponses dans Apidog

Conclusion

Dans ce tutoriel, nous avons abordé les bases de la configuration d'une application FastAPI avec MongoDB. Nous avons créé une simple API d'inventaire qui vous permet de créer, de récupérer, de mettre à jour et de supprimer des éléments. La rapidité et la facilité d'utilisation de FastAPI, combinées à la flexibilité et à l'évolutivité de MongoDB, en font une paire parfaite pour la création d'API robustes.

En tirant parti d'outils comme Apidog, vous pouvez rationaliser le processus de développement et de test, en vous assurant que vos API sont fiables et performantes.

Alors, qu'attendez-vous ? Plongez dans FastAPI et MongoDB, et commencez à créer des API incroyables dès aujourd'hui !

Explore more

Comment utiliser Deepseek R1 en local avec Cursor

Comment utiliser Deepseek R1 en local avec Cursor

Apprenez à configurer DeepSeek R1 local avec Cursor IDE pour une aide au codage IA privée et économique.

4 June 2025

Comment exécuter Gemma 3n sur Android ?

Comment exécuter Gemma 3n sur Android ?

Apprenez à installer et exécuter Gemma 3n sur Android via Google AI Edge Gallery.

3 June 2025

Comment utiliser Claude Code avec GitHub Actions

Comment utiliser Claude Code avec GitHub Actions

Découvrez Claude Code avec GitHub Actions : revues de code, corrections de bugs, implémentation de fonctionnalités. Tutoriel pour développeurs.

29 May 2025

Pratiquez le Design-first d'API dans Apidog

Découvrez une manière plus simple de créer et utiliser des API