Découvrez comment créer une API RESTful à l'aide de Flask et Postgres, permettant un échange de données transparent entre votre application et des systèmes externes.

Les interfaces de programmation d'applications (API) sont un élément essentiel 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.

Bien que le développement backend implique plus que la simple écriture d'API, il couvre également l'écriture de la logique métier côté serveur, la conception d'un système efficace architectures et autres fonctions clés, lisez la suite pour apprendre à créer une API REST CRUD simple avec Flask (un framework Python léger) et Postgres base de données.

Utilisation de Flask pour créer des API backend

Ballon est un poids léger Cadre Python 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.

instagram viewer

Vous pouvez trouver le code source de ce projet dans ce Référentiel GitHub.

Ce guide vous guidera dans la rédaction d'un API REST qui implémente les quatre opérations CRUD: créer, lire, mettre à jour et supprimer pour gérer les données utilisateur stockées dans une base de données Postgres.

Configurer une base de données Postgres

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

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

Indiquez le nom de votre instance et sélectionnez le plan gratuit, puis sélectionnez la région où l'instance sera hébergée pour terminer le processus de configuration.

Une fois l'instance créée, accédez à la page des paramètres et copiez le URL de la base de données, vous l'utiliserez pour établir une connexion avec la base de données.

Configurer un serveur Flask

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

Avant d'installer Flask, confirmez que vous exécutez Python version 3.6+ sur votre machine. Sinon, vous devez installer la dernière Python version.

python --version

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

pip installer virtualenv

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

virtualenv venv

Enfin, activez l'environnement virtuel.

# Sous Windows: 
.\venv\Scripts\activate
# Sous Unix ou MacOS:
source venv/bin/activer

Installer les packages requis

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

ballon
python-dotenv
psycopg2-binaire

Ensuite, installez les packages.

pip install -r exigences.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 de base de données.

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

DATABASE_URL=l'URL de votre base de données

Créer le serveur Flask

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

importer os 
importer psycopg2
depuis dotenv importer load_dotenv
depuis ballon importer Flacon, requête, jsonify

load_dotenv()

app = flacon (__nom__)
url = os.getenv("DATABASE_URL")
connexion = psycopg2.connect (url)

@app.get("/")
définitivementmaison():
retour"Bonjour le monde"

Ce code configure 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, configure une route principale qui renvoie une chaîne en réponse.

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

Maintenant, construisez l'API REST qui implémente les quatre opérations CRUD.

Créer un tableau de démonstration

Créez 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);"

avec connexion:
avec connexion.curseur() comme le curseur:
curseur.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 en utilisant le connexion.curseur méthode utilisée pour exécuter Requêtes SQL.

1. Définir la méthode POST

Créez la route de publication pour ajouter des données.

INSERT_USER_RETURN_ID = "INSERT INTO utilisateurs (nom) VALUES (%s) RETURNING id ;"
@app.route("/api/user", methodes=["POST"])
définitivementCréer un utilisateur():
données = request.get_json()
nom = données["nom"]
avec connexion:
avec connexion.curseur() comme le curseur:
curseur.execute (INSERT_USER_RETURN_ID, (nom,))
user_id = curseur.fetchone()[0]
retour {"identifiant": ID de l'utilisateur, "nom": nom, "message": f"Utilisateur {nom} créé."}, 201
  • La chaîne de requête SQL définit une instruction SQL qui sera exécutée à l'aide de la curseur.execute méthode pour insérer une nouvelle ligne avec le nom d'un utilisateur dans la utilisateurs' table dans la base de données. Il renvoie l'ID de l'utilisateur nouvellement créé.
  • Le Créer un utilisateur la fonction prend un nom comme paramètre à stocker dans la base de données tandis que la curseur.fetchone La méthode est appelée pour récupérer l'ID de l'utilisateur nouvellement créé. Enfin, un dictionnaire contenant l'ID et le nom de l'utilisateur nouvellement créé, ainsi qu'un message indiquant que l'utilisateur a été créé avec succès, est renvoyé.

2. Définir la méthode GET

Définissez deux routes d'obtention: une, pour récupérer toutes les données de la base de données, et deux, pour récupérer des données spécifiques de la base de données en fonction de l'ID.

SELECT_ALL_USERS = "SELECT * FROM utilisateurs ;"

@app.route("/api/user", methodes=["GET"])
définitivementget_all_users():
avec connexion:
avec connexion.curseur() comme le curseur:
curseur.execute (SELECT_ALL_USERS)
utilisateurs = curseur.fetchall()
si utilisateurs:
résultat = []
pour utilisateur dans utilisateurs:
résultat.append({"identifiant": utilisateur[0], "nom": utilisateur[1]})
retour jsonifier (résultat)
autre:
retour jsonifier({"erreur": f"Utilisateurs introuvables."}), 404

@app.route("/api/user/", méthodes=["OBTENIR"])
définitivementget_user(ID de l'utilisateur):
avec connexion:
avec connexion.curseur() comme le curseur:
curseur.execute("SELECT * FROM utilisateurs WHERE id = %s", (ID de l'utilisateur,))
utilisateur = curseur.fetchone()
si utilisateur:
retour jsonifier({"identifiant": utilisateur[0], "nom": utilisateur[1]})
autre:
retour jsonifier({"erreur": f"Utilisateur avec ID {ID de l'utilisateur} pas trouvé."}), 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. Il récupère tous les utilisateurs de la base de données et renvoie les résultats au format JSON dans la réponse.
  • Cette deuxième route d'API gère les requêtes HTTP GET pour récupérer les données d'un utilisateur spécifique à partir de la base de données. Il prend dans le ID de l'utilisateur en tant que paramètre, récupère les données de l'utilisateur à partir de la base de données et renvoie les résultats au format JSON dans la réponse.

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/", méthodes=["METTRE"])
définitivementupdate_user(ID de l'utilisateur):
données = request.get_json()
nom = données["nom"]
avec connexion:
avec connexion.curseur() comme le curseur:
curseur.execute (UPDATE_USER_BY_ID, (nom, user_id))
si curseur.rowcount == 0:
retour jsonifier({"erreur": f"Utilisateur avec ID {ID de l'utilisateur} pas trouvé."}), 404
retour jsonifier({"identifiant": ID de l'utilisateur, "nom": nom, "message": f"Utilisateur avec ID {ID de l'utilisateur} mis à jour."})
  • Le update_user La fonction prend le paramètre d'ID utilisateur comme 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 utilisateur mis à jour, le nom et un message de réussite dans la réponse.

4. Définir la méthode DELETE

Implémentez la route de suppression pour supprimer les données stockées d'un utilisateur spécifique dans la base de données.

@app.route("/api/user/", méthodes=["SUPPRIMER"])
définitivementSupprimer l'utilisateur(ID de l'utilisateur):
avec connexion:
avec connexion.curseur() comme le curseur:
curseur.execute (DELETE_USER_BY_ID, (user_id,))
si curseur.rowcount == 0:
retour jsonifier({"erreur": f"Utilisateur avec ID {ID de l'utilisateur} pas trouvé."}), 404
retour jsonifier({"message": f"Utilisateur avec ID {ID de l'utilisateur} supprimé."})
  • Cette route d'API gère la fonctionnalité de suppression d'un utilisateur spécifique de la base de données en fonction de son ID. Si l'utilisateur n'est pas trouvé, il renvoie un code d'état 404 avec un message d'erreur. Cependant, si l'opération de suppression réussit, elle renvoie un objet JSON avec un message de réussite dans la réponse.

Écrire des API REST avec Flask

Ce guide montre comment utiliser Flask et Postgres pour créer une API CRUD REST simple, comment pour établir une connexion à une base de données et exécuter différentes requêtes SQL pour lire et écrire des données sur un base de données. Vous pouvez désormais créer une API REST simple capable de gérer les quatre opérations CRUD requises dans n'importe quelle application Web.

Que vous construisiez un simple blog ou une application Web complexe, Flask et Postgres offrent des fonctionnalités et des capacités puissantes nécessaires pour créer un système backend robuste. Vous pouvez également utiliser d'autres technologies telles que FastAPI et MongoDB pour créer des API RESTful.