Accueil Technologie
Comment créer une API REST avec FastAPI et MongoDB

Comment créer une API REST avec FastAPI et MongoDB

La création d’une API REST est souvent une tâche mécanique, impliquant beaucoup de conception passe-partout et de programmation par cœur. Heureusement, des outils comme FastAPI peuvent vous soulager de ces détails fastidieux.


En utilisant FastAPI, vous pouvez rapidement construire une API REST efficace et complète pour votre application CRUD. Avec MongoDB comme source de données, ce tutoriel vous guidera vers la mise en place de votre propre API en un rien de temps.

Qu’est-ce que FastAPI ?

FastAPI est un framework web Python rapide et open-source pour la construction d’APIs. Il fournit un support intégré pour les requêtes asynchrones, la validation automatique des données et la documentation automatique des points de terminaison des API.

Diagramme d'un système de serveur réseau avec des nœuds de serveur en arrière-plan

Les avantages de FastAPI par rapport aux autres frameworks Python

  • FastAPI est relativement plus rapide que d’autres frameworks comme Django et Flask. Cela s’explique par le fait que FastAPI s’appuie sur asyncio, une bibliothèque d’E/S asynchrone pour Python qui peut traiter les requêtes simultanées plus rapidement.
  • FastAPI fournit un moyen propre et simple de construire des API avec un minimum d’effort puisqu’il nécessite moins de code que Flask ou Django.
  • Enfin, FastAPI permet de générer facilement de la documentation pour les points de terminaison. Il utilise Swagger pour produire une documentation que vous pouvez utiliser pour tester les points de terminaison en exécutant des requêtes et en visualisant les réponses.

Configuration d’une base de données MongoDB

Pour commencer, vous devez configurer une base de données MongoDB en local. Vous pouvez également opter pour l’option la plus simple qui consiste à configurer un cluster MongoDB dans le Cloud.

Ensuite, en utilisant l’outil d’interface graphique MongoDB installé, Compass, créez une connexion à la base de données. Cliquez sur le bouton Nouvelle connexion et fournissez l’URI de connexion pour établir une connexion avec le serveur MongoDB exécuté localement.

Nouvelle page de paramètres de connexion pour l'outil de compas MongoDB

Enfin, créez une nouvelle base de données et une nouvelle collection pour contenir les données de votre API de test.

Collection MongoDB sur MongoDB Compass

Configuration d’un serveur FastAPI

En utilisant un terminal, créez un dossier de projet, et entrez dans ce nouveau répertoire.

Vous pouvez trouver le code de ce projet dans son dépôt GitHub.

Ensuite, vérifiez que vous utilisez Python version 3.6+. Si ce n’est pas le cas, installez la dernière version de Python.

 python --version 

Ensuite, installez Virtualenv pour créer un environnement de développement virtuel isolé. Ceci est fortement recommandé car cela vous permet d’éviter les conflits, surtout si vous utilisez différentes versions de paquets pour différents projets.

 pip install virtualenv 

Ensuite, créez un environnement virtuel appelé « venv » dans votre répertoire actuel :

 virtualenv venv 

Enfin, activez l’environnement virtuel.

 # On Unix or MacOS: 
source venv/bin/activate

# On Windows:
 .\venv\Scripts\activate

Une fois que vous avez configuré l’environnement virtuel, installez les paquets FastAPI, PyMongo et Uvicorn.

 pip install fastapi pymongo uvicorn 

PyMongo est une bibliothèque basée sur Python pour travailler avec la base de données MongoDB. Elle fournit une API qui prend en charge toutes les fonctionnalités de MongoDB et vous permet d’interagir avec MongoDB sans avoir à écrire des requêtes MongoDB brutes.

Uvicorn, quant à lui, est un serveur web asynchrone basé sur le module Python asyncio. Sa principale caractéristique est le rechargement à chaud de vos serveurs FastAPI en déplacement. L’utilisation d’Uvicorn est similaire à celle de Nodemon.

Créer le serveur FastAPI

Enfin, créez un simple serveur FastAPI qui écoute les demandes de réception provenant de la route d’origine. Dans le répertoire racine du dossier de votre projet, créez un fichier server.py et ajoutez le code ci-dessous.

 from fastapi import FastAPI
app = FastAPI()

@app.get("https://www.makeuseof.com/")
async def home():
    return {"message": "Hello World"}

Enfin, exécutez la commande ci-dessous pour lancer le serveur de développement. Uvicorn va servir votre application sur le port 8000.

 uvicon server:app --reload 

Allez-y et regardez la réponse du serveur sur votre navigateur à http://localhost:8000.

Créer l’API REST avec des opérations CRUD

Construisez maintenant l’API REST qui implémente les méthodes CRUD (create, read, update, and delete). Dans le répertoire racine de votre dossier de projet, créez quatre dossiers : config, models, routes et schemas.

 ├── config
├── models
├── routes
├── schemas
└── server.py

1. Configurer la connexion à la base de données

Dans le répertoire config, créez un nouveau fichier, db.py, et ajoutez le code ci-dessous.

 from pymongo import MongoClient
db_connection = MongoClient("mongodb://localhost:27017")
db = db_connection.database_name
collection = db["collection_name"]
  • Utilisez la méthode MongoClient() pour créer une connexion à une base de données MongoDB. Elle prend en argument une chaîne URI de connexion qui spécifie l’hôte et le port du serveur MongoDB.
  • Les deux variables précisent à quelle base de données et à quelle collection de votre serveur MongoDB le serveur doit accéder.

2. Définir un modèle de données

Ce modèle définira la structure de vos données dans la base de données, y compris les champs et les types de données.

Dans le répertoire du modèle, créez un nouveau fichier, user_model.py, et ajoutez le code ci-dessous.

 from pydantic import BaseModel 

class User(BaseModel):
    name: str
    role: str
  • Le code ci-dessus crée une classe appelée User, qui est une sous-classe de la classe BaseModel de la bibliothèque Pydantic. La classe User possède deux champs, name et role, dont les types de données sont des chaînes de caractères.
  • Vous pouvez utiliser la bibliothèque Pydantic avec FastAPI pour créer des modèles de données. Vous pouvez également l’utiliser pour valider des données, les sérialiser (JSON vers Python) et les désérialiser (Python vers JSON).

3. Définir un schéma de données

A partir du modèle de données créé, vous pouvez définir le schéma de vos données. Dans le répertoire schemas, créez un nouveau fichier : user_schema.py, et ajoutez le code ci-dessous.

 def user_serializer(user) -> dict:
    return {
        'id':str(user["_id"]),
        'name':user["name"],
        'role':user["role"]
    }

def users_serializer(users) -> list:
    return [user_serializer(user) for user in users]

4. Définir les routes de l’API

Enfin, définissez les routes pour les différentes opérations CRUD.

Opérations CRUD affichées par l'outil de test de l'API Swagger UI

Dans le répertoire routes, créez un nouveau fichier : user_routes.py, et ajoutez le code ci-dessous.

Ajouter des données avec la méthode Post

Créez la route post pour ajouter des données.

 from fastapi import APIRouter
from models.user_model import User
from schemas.user_schema import users_serializer
from bson import ObjectId
from config.db import collection

user = APIRouter()

@user.post("https://www.makeuseof.com/")
async def create_user(user: User):
    _id = collection.insert_one(dict(user))
    user = users_serializer(collection.find({"_id": _id.inserted_id}))
    return {"status": "Ok","data": user}
  • FastAPI fournit la méthode APIRouter() qui définit un objet routeur qui fournit une interface pour faire des demandes API à un serveur.
  • Spécifiez une route post qui crée un nouvel objet utilisateur dans la base de données en insérant les données dans la collection après les avoir sérialisées. Ensuite, stockez et passez le inserted_id pour trouver les données associées dans la collection, et enfin, renvoyez un statut « Ok » avec les données dans la réponse, si la requête post est réussie.
  • Les méthodes insert_one et find sont définies par le client PyMongo.

Maintenant, ajoutez le code ci-dessous au server.py pour initialiser les routes.

 from routes.user_routes import user
app.include_router(user)

Allez-y et testez la route post sur votre navigateur en utilisant l’outil API Swagger UI. fourni par FastAPI.

Lire des données avec la méthode Get

Après avoir défini la route post et initialisé les routes, définissez le reste des autres routes.

 @user.get("https://www.makeuseof.com/")
async def find_all_users():
    users = users_serializer(collection.find())
    return {"status": "Ok","data": users}
            
@user.get("/{id}")
async def get_one_user(id: str):
   user = users_serializer(collection.find({"_id": ObjectId(id)}))
   return {"status": "Ok","data": user}

Définissez deux routes get qui récupèrent toutes les données de la collection et récupèrent des données spécifiques de la collection basées sur l’ID.

Mise à jour des données avec la méthode Put

Créez la route put pour mettre à jour les données stockées dans la base de données.

 @user.put("/{id}")
async def update_user(id: str, user: User):
    collection.find_one_and_update(
        {
          "_id": ObjectId(id)
        },
        {
         "$set": dict(user)
        })
    user = users_serializer(collection.find({"_id": ObjectId(id)}))
    return {"status": "Ok","data": user}

La méthode put utilise l’ID pour trouver les données spécifiques dans la collection et met à jour la valeur des champs dans le document avec les nouvelles données transmises par l’API. Vous pouvez ensuite rechercher les données mises à jour par ID et les renvoyer dans la réponse de l’API.

Supprimer des données avec la méthode Delete

Créez la route de suppression pour supprimer les données stockées dans la base de données.

 @user.delete("/{id}")
async def delete_user(id: str):
   collection.find_one_and_delete({"_id": ObjectId(id)})
   users = users_serializer(collection.find())
   return {"status": "Ok","data": []}

L’itinéraire de suppression prend l’ID du document spécifique que vous voulez supprimer de la collection.

Créer des API REST avec FastAPI

FastAPI est un excellent moyen de créer facilement des API web Python. Ses outils intégrés pour l’intégration de bases de données et la production automatique d’API rendent le processus simple.

Vous pouvez même aller un peu plus loin et construire des applications à part entière. Essayez d’intégrer un client frontal en utilisant des technologies populaires comme React, Angular ou Vue.

Leave your vote

0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires

Log In

Forgot password?

Don't have an account? Register

Forgot password?

Enter your account data and we will send you a link to reset your password.

Your password reset link appears to be invalid or expired.

Log in

Privacy Policy

Add to Collection

No Collections

Here you'll find all collections you've created before.

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x