Comment créer une API RESTful avec Flask en Python

Apprenez à construire une API RESTful en utilisant Flask, Python et SQLite, couvrant la configuration, les opérations CRUD, l’intégration de bases de données et les meilleures pratiques pour l’organisation du code.

Introduction

Dans ce tutoriel, nous vous guiderons à travers le processus de création d’une API RESTful avec Flask et Python. Flask est un micro-cadre populaire pour la création d’applications web en Python, et les API RESTful sont une architecture standardisée pour créer des services web évolutifs et évolutifs.

Par conséquent, nous ne construirons pas un site web complet, qui nécessite de rendre des modèles HTML. Au lieu de cela, nous allons construire un code dorsal typique d’une application web Flask.

Conditions préalables

Avant de commencer, assurez-vous que vous avez installé les éléments suivants sur votre système :

  • Python 3.x
  • pip(Installateur de conditionnement de l’emballage du CP)

Commençons.

1. Installation de Flask et Flask-RESTful

Avant d’installer Flask et ses dépendances, faisons un environnement virtuel et activons-le

Maintenant, nous devons installer Flask et Flask-RESTful en utilisant pip. Ouvrez votre terminal ou l’invite de commande et lancez la commande suivante :

2. Création d’une application de base

Créer un nouveau fichier appelé app.pyet ajouter le code suivant:

Ce code établit une application de base de flasque avec un seul itinéraire. Sauvegarder le fichier et lancer l’application avec la commande suivante:

Maintenant, ouvrez votre navigateur web et visitez http://127.0.0.1:5000/. Vous devriez voir le message « Bonjour, Monde ».

3. Création d’une API RESTful avec Flask-RESTful

Maintenant que nous avons une application de base Flask, nous pouvons commencer à construire notre API RESTful. Modifier app.pyinclure le code suivant:

Ici, nous avons créé un HelloWorldressources qui hérite de Resourceet l’a ajouté à notre API sous le /apiterminal. Le get()Une méthode retourne un objet JSON contenant un message.

4. Test de l’API

Sauver les changements à app.pyet redémarrer l’application. Pour tester l’API, vous pouvez utiliser des outils comme curl, Postman, ou même votre navigateur web. Ouvrez votre navigateur web et visitez http://127.0.0.1:5000/api. Vous devez voir la réponse JSON suivante :

5. Extension de l’API

Maintenant, élargissons notre API pour gérer des opérations plus complexes. Supposons que nous voulions créer une API pour gérer une liste de tâches. Mise à jour app.pyportant le code suivant:

Maintenant, nous avons un TaskListune ressource à deux méthodes: get()pour la récupération de la liste des tâches et post()pour l’ajout d’une nouvelle tâche. La liste des tâches est conservée en mémoire sous la forme d’une simple liste Python.

6. Utilisation d’une base de données réelle (SQLite)

Dans cette étape, nous remplacerons la liste en mémoire par une base de données SQLite pour persister les tâches. SQLite est une base de données légère, sans serveur et autonome qui est facile à mettre en place et à utiliser.

Tout d’abord, installez l’extension Flask-SQLAlchemy pour faciliter le fonctionnement avec SQLAlchemy et SQLite:

Mise à jour app.pyportant le code suivant:

Dans ce code mis à jour, nous avons ajouté le paquet Flask-SQLAlchemy et l’avons configuré pour utiliser un fichier de base de données SQLite nommé tasks.db. Nous avons créé un Taskmodèle avec une clé primaire et une description. Le db.create_all()fonction crée les tables de base de données si elles n’existent pas déjà.

Nous avons modifié le TaskListune ressource pour interagir avec la base de données SQLite. Le get()méthode récupère toutes les tâches de la base de données, et post()La méthode ajoute une nouvelle tâche à la base de données et engage les changements.

Lorsque vous faites une demande POST sans charge utile JSON valide, l’API renvoie un message d’erreur avec un code d’état 400, indiquant que la demande est incorrecte. De plus, le code vérifie si le champ de description est présent dans les données de demande et retourne un message d’erreur s’il manque.

Relancez l’application et testez l’API en utilisant votre outil préféré (par ex., curl, Postman, ou navigateur web). Les tâches devraient maintenant persister entre les sessions et être stockées dans le tasks.dbFichier de base de données SQLite.

7. Séparation du code en plusieurs fichiers

Dans les applications du monde réel, c’est une bonne pratique de séparer votre code en plusieurs fichiers pour maintenir une structure de projet propre et organisée. Cette modularité rend votre code plus facile à comprendre, à maintenir et à étendre.

Voici un exemple de la façon dont vous pourriez séparer le code de notre tutoriel en plusieurs fichiers :

  • config.py: Stockez les paramètres de configuration de votre application, tels que l’url de la base de données:

models.py: Définir vos modèles de base de données et votre schéma:

resources.py: Définissez vos ressources et votre logique API :

app.py: Initialiser l’application, les ressources d’importation et définir les axes API :

En séparant le code en différents fichiers, vous pouvez facilement gérer les composants de votre application et maintenir une structure de projet bien organisée. En outre, cette approche modulaire vous permet de réutiliser le code et d’adapter votre application plus efficacement.

Après avoir exécuté l’application, voici une demande POST que j’ai faite avec Postman :

Assurez-vous de choisir la méthode POST. Dirigez-vous vers l’onglet Corps, choisissez le brut et sélectionnez « JSON » dans le menu déroulant à droite des boutons radio.

Après avoir fait la demande POST à deux reprises, voici une demande GET :

Conclusion

Dans ce tutoriel, nous avons démontré comment créer une API RESTful en utilisant Flask, Python et SQLite. Nous avons montré comment utiliser Flask-RESTful pour construire l’API et la Flask-SQLAlchemy pour maintenir les données dans une base de données SQLite. Avec ces connaissances, vous pouvez créer des API plus complexes et puissantes pour vos applications.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *