Les interfaces de programmation d’applications (API) sont une partie essentielle de la construction et de la connexion de différents systèmes, permettant à vos applications de communiquer et d’échanger des données avec d’autres services.


Le développement d’un backend ne se limite pas à l’écriture d’API – il couvre également l’écriture de la logique commerciale côté serveur, la conception d’architectures système efficaces et d’autres fonctions clés. Lisez la suite pour apprendre à construire une API REST CRUD simple avec Flask (un framework Python léger) et la base de données Postgres.

Utiliser Flask pour construire des API backend

Flask est un framework Python léger qui fournit un certain nombre de fonctionnalités pour simplifier l’écriture d’API backend pour les clients web écrits à l’aide de différentes technologies telles que React et Angular.

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

Ce guide vous aidera à écrire une API REST qui met en œuvre les quatre opérations CRUD : créer, lire, mettre à jour et supprimer pour gérer les données des utilisateurs stockées dans une base de données Postgres.

Lire  Qu'est-ce qu'un toit solaire Tesla, comment fonctionne-t-il et combien coûte-t-il ?

La gestion d’une base de données Postgres

Pour commencer, rendez-vous sur le site d’ElephantSQL, une solution d’hébergement de bases de données basée sur le cloud qui fournit une plateforme pour créer et gérer des bases de données Postgres sur le cloud, inscrivez-vous et connectez-vous à la page de présentation de votre compte.

Page d'accueil ElephantSQL

Cliquez sur le bouton Créer une nouvelle instance pour créer une nouvelle instance pour votre application.

Bouton

Indiquez le nom de votre instance et sélectionnez le plan gratuit. Enfin, sélectionnez la région où l’instance sera hébergée pour terminer le processus d’installation.

Instance sur le tableau de bord

Une fois l’instance créée, naviguez jusqu’à la page des paramètres et copiez le fichier URL de la base de donnéesvous l’utiliserez pour établir une connexion avec la base de données.

Détails de la base de données Postgres sur ElephantSQL

Mise en place d’un serveur Flask

Sur votre terminal, créez un dossier de projet et changez le répertoire actuel en ce nouveau dossier.

Avant d’installer Flask, vérifiez que vous utilisez la version 3.6+ de Python sur votre machine. Si ce n’est pas le cas, vous devez installer la dernière version de Python.

 python --version 

Ensuite, installez virtualenvpour créer un environnement de développement virtuel isolé.

 pip install virtualenv 

Ensuite, exécutez la commande ci-dessous pour créer un environnement virtuel.

 virtualenv venv 

Enfin, activez l’environnement virtuel.

 # On Windows: 
.\venv\Scripts\activate
# On Unix or MacOS:
source venv/bin/activate

Installer les paquets nécessaires

Dans le répertoire racine du dossier de votre projet, créez un fichier requirements.txt et ajoutez ces paquets.

 flask
python-dotenv
psycopg2-binary

Ensuite, installez les paquets.

 pip install -r requirements.txt 

Le psycopg2-binaire est une bibliothèque Python qui agit comme un middleware, pour vous permettre d’établir des connexions avec votre base de données Postgres et d’effectuer diverses opérations sur la base de données.

Enfin, créez un fichier .env et collez l’URL de votre base de données.

 DATABASE_URL= your database URL 

Créer le serveur Flask

Enfin, créez un app.py dans le répertoire racine, et ajoutez le code ci-dessous.

 import os 
import psycopg2
from dotenv import load_dotenv
from flask import Flask, request, jsonify

load_dotenv()

app = Flask(__name__)
url = os.getenv("DATABASE_URL")
connection = psycopg2.connect(url)


@app.get("https://www.makeuseof.com/")
def home():
    return "hello world"

Ce code met en place une instance de l’application Flask. Il crée ensuite une connexion à la base de données spécifiée dans la chaîne d’URL et, enfin, met en place une route d’accueil qui renvoie une chaîne en guise de réponse.

Créer l’API REST permettant les opérations CRUD

Maintenant, créez l’API REST qui met en œuvre les quatre opérations CRUD.

Créer une table de démonstration

Créer une table utilisateur dans la base de données.

Dans le fichier app.py, ajoutez le code ci-dessous.

 CREATE_USERS_TABLE = "CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, name TEXT);"

with connection:
    with connection.cursor() as cursor:
        cursor.execute(CREATE_USERS_TABLE)
  • Ce code crée une nouvelle table PostgreSQL appelée utilisateurs avec deux colonnes.
  • Il utilise la méthode de connexion psycopg2 pour établir la connexion avec la base de données et crée un nouvel objet curseur à l’aide de la méthode connexion.curseur qui est utilisée pour exécuter des requêtes SQL.

1. Définir la méthode POST

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

 INSERT_USER_RETURN_ID = "INSERT INTO users (name) VALUES (%s) RETURNING id;"
@app.route("/api/user", methods=["POST"])
def create_user():
    data = request.get_json()
    name = data["name"]
    with connection:
        with connection.cursor() as cursor:
            cursor.execute(INSERT_USER_RETURN_ID, (name,))
            user_id = cursor.fetchone()[0]
    return {"id": user_id, "name": name, "message": f"User {name} created."}, 201
  • La chaîne de requête SQL définit une instruction SQL qui sera exécutée à l’aide de la fonction curseur.execute pour insérer une nouvelle ligne avec le nom d’un utilisateur dans la base de données utilisateurs dans la base de données. Il renvoie l’identifiant de l’utilisateur nouvellement créé.
  • La fonction créer_utilisateur prend en paramètre un nom à stocker dans la base de données, tandis que la fonction curseur.fetchone est appelée pour récupérer l’identifiant de l’utilisateur nouvellement créé. Enfin, un dictionnaire contenant l’identifiant et le nom de l’utilisateur nouvellement créé, ainsi qu’un message indiquant que l’utilisateur a été créé avec succès, est renvoyé.

Route de demande de l'API Post Method

2. Définir la méthode GET

Définissez deux routes get : l’une pour récupérer toutes les données de la base de données, l’autre pour récupérer des données spécifiques de la base de données en fonction de l’identifiant.

 SELECT_ALL_USERS = "SELECT * FROM users;"


@app.route("/api/user", methods=["GET"])
def get_all_users():
    with connection:
        with connection.cursor() as cursor:
            cursor.execute(SELECT_ALL_USERS)
            users = cursor.fetchall()
            if users:
                result = []
                for user in users:
                    result.append({"id": user[0], "name": user[1]})
                return jsonify(result)
            else:
                return jsonify({"error": f"Users not found."}), 404

@app.route("/api/user/<int:user_id>", methods=["GET"])
def get_user(user_id):
    with connection:
        with connection.cursor() as cursor:
            cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
            user = cursor.fetchone()
            if user:
                return jsonify({"id": user[0], "name": user[1]})
            else:
                return jsonify({"error": f"User with ID {user_id} not found."}), 404
  • Cette première route API gère les requêtes HTTP GET pour récupérer tous les utilisateurs de la base de données. Elle récupère tous les utilisateurs de la base de données et renvoie les résultats au format JSON dans la réponse.
    Route API

  • Cette deuxième route API gère les requêtes HTTP GET pour récupérer les données d’un utilisateur spécifique dans la base de données. Elle prend en compte l’élément ID de l’utilisateur comme paramètre, récupère les données de l’utilisateur dans la base de données et renvoie les résultats au format JSON dans la réponse.
    Route API

3. Définir la méthode PUT

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

 @app.route("/api/user/<int:user_id>", methods=["PUT"])
def update_user(user_id):
    data = request.get_json()
    name = data["name"]
    with connection:
        with connection.cursor() as cursor:
            cursor.execute(UPDATE_USER_BY_ID, (name, user_id))
            if cursor.rowcount == 0:
                return jsonify({"error": f"User with ID {user_id} not found."}), 404
    return jsonify({"id": user_id, "name": name, "message": f"User with ID {user_id} updated."})
  • La route update_user prend le paramètre ID de l’utilisateur en entrée et l’utilise pour mettre à jour le nom de l’utilisateur spécifié dans la base de données.
  • Si l’opération de mise à jour réussit, elle renvoie un objet JSON avec l’ID et le nom de l’utilisateur mis à jour, ainsi qu’un message de réussite dans la réponse.
    Route API

4. Définir la méthode DELETE

Implémenter la route delete pour supprimer les données stockées d’un utilisateur spécifique dans la base de données.

 @app.route("/api/user/<int:user_id>", methods=["DELETE"])
def delete_user(user_id):
    with connection:
        with connection.cursor() as cursor:
            cursor.execute(DELETE_USER_BY_ID, (user_id,))
            if cursor.rowcount == 0:
                return jsonify({"error": f"User with ID {user_id} not found."}), 404
    return jsonify({"message": f"User with ID {user_id} deleted."})
  • Cette route API gère la fonctionnalité de suppression d’un utilisateur spécifique de la base de données sur la base de son ID. Si l’utilisateur n’est pas trouvé, elle renvoie un code d’état 404 avec un message d’erreur. Cependant, si l’opération de suppression est réussie, elle renvoie un objet JSON avec un message de réussite dans la réponse.
    Route API

Écrire des API REST avec Flask

Ce guide montre comment utiliser Flask et Postgres pour construire une API REST CRUD simple, ainsi que comment établir une connexion à une base de données et exécuter différentes requêtes SQL pour lire et écrire des données dans une base de données. Vous pouvez maintenant créer une API REST simple qui peut gérer les quatre opérations CRUD requises dans toute application web.

Que vous construisiez un simple blog ou une application web complexe, Flask et Postgres offrent de puissantes fonctionnalités et capacités nécessaires à la création d’un système backend robuste. Vous pouvez également utiliser d’autres technologies comme FastAPI et MongoDB pour créer des API RESTful.