Python est l'un des langages de programmation les plus faciles à lire et à écrire de tous les temps. Au fil des ans, la popularité de Python n'a fait qu'augmenter et il est largement utilisé dans le développement d'applications Web, les scripts, la création de jeux, le calcul scientifique, etc.
Flask est un framework d'application Web Python qui gagne en popularité en raison de sa facilité d'utilisation pour les débutants en Python. Dans ce didacticiel, nous examinerons EVE, un framework de construction d'API REST basé sur Flask, MongoDB et Redis. À partir des documents officiels :
Optimisé par Flask, MongoDB, Redis et les bonnes intentions, Eve permet de créer et de déployer sans effort un service Web RESTful hautement personnalisable et complet.
Ce que nous allons créer
Dans ce didacticiel, nous verrons comment créer des API REST à l'aide du framework EVE. Ensuite, en utilisant AngularJS, nous allons concevoir le front-end d'une application simple et la rendre fonctionnelle en utilisant les API REST construites à l'aide d'EVE. Dans ce didacticiel, nous allons implémenter la fonctionnalité suivante :
- Créer une API utilisateur
- Valider l'API utilisateur
- API d'ajout d'éléments
- API de suppression d'éléments
- API de mise à jour des éléments
Mise en route
Installation
Nous utiliserons pip pour installer EVE.
pip install eve
Nous utiliserons MongoDB
comme base de données. Consultez la documentation officielle pour l'installation en fonction de votre système.
Création de l'API de base
Créez un dossier de projet appelé PythonAPI
. Accédez à PythonAPI
et créez un fichier appelé api.py
. Dans api.py
importer EVE
et créer un objet EVE.
from eve import Eve app = Eve()
Ensuite, exécutez app
lorsque le programme est exécuté en tant que programme principal.
from eve import Eve app = Eve() if __name__ == '__main__': app.run()
Exécutez votre MongoDB
en utilisant la commande suivante :
mongod --dbpath= <PATH-TO> /data/db/
Comme vous pouvez le voir, nous devons spécifier un chemin pour les fichiers db. Créez simplement data/db
dans votre système de fichiers et exécutez la commande ci-dessus.
Avec une instance de MongoDB
en cours d'exécution, EVE nécessite un fichier de configuration contenant des informations sur les ressources de l'API. Donc, dans PythonAPI
dossier créer un autre fichier appelé settings.py
et ajoutez le code suivant :
DOMAIN = {'user': {}}
Le code ci-dessus informe EVE qu'une ressource pour user
est disponible.
Enregistrez tous les fichiers et exécutez api.py
:
python api.py
L'API doit être en ligne comme indiqué :
Nous utiliserons Postman REST Client pour envoyer des requêtes aux API. Il est gratuit et peut être installé d'un simple clic. Une fois l'installation terminée, lancez l'application et entrez l'URL de l'API (http://127.0.0.1:5000/) et cliquez sur envoyer. Vous devriez avoir la réponse comme indiqué :
Comme nous n'avons appelé aucune ressource API spécifique, toutes les ressources disponibles seront affichées. Maintenant, essayez d'appeler l'user
ressource et vous devriez avoir la réponse spécifique à l'user
.
Créer et valider l'API utilisateur
Créer une API utilisateur
Nous allons commencer par créer une API pour créer ou enregistrer un utilisateur pour notre application. L'utilisateur aurait certains champs comme First Name
, Last Name
, Username
, Password
et Phone Number
.
Nous devrons donc d'abord définir un schéma pour un utilisateur. Le schéma définit les champs et les types de données des champs clés. Ouvrez settings.py
et modifier le DOMAIN
en définissant un schéma comme indiqué :
DOMAIN = { 'user': { 'schema': { 'firstname': { 'type': 'string' }, 'lastname': { 'type': 'string' }, 'username': { 'type': 'string', 'unique': True }, 'password': { 'type': 'string' }, 'phone': { 'type': 'string' } } } }
Comme vous pouvez le voir dans le code ci-dessus, nous avons défini les champs clés nécessaires pour créer un utilisateur et son type de données défini dans le schéma. Enregistrez les modifications et exécutez api.py
. À partir du client Postman, essayez de faire une requête POST avec les paramètres requis à http://127.0.0.1/user comme indiqué :
Lors de la demande POST à l'utilisateur, il a lancé une 405 Method Not Allowed
Erreur. Par défaut, EVE n'accepte que les requêtes GET. Si nous voulons utiliser une autre méthode, nous devons la définir explicitement. Ouvrez settings.py
et définissez les méthodes de ressource comme indiqué :
RESOURCE_METHODS = ['GET', 'POST']
Enregistrez les modifications et exécutez api.py
. Maintenant, réessayez de POST
à l'utilisateur et vous devriez avoir la réponse ci-dessous :
Comme vous pouvez le voir, la requête POST ci-dessus a réussi. Nous n'avons pas défini les configurations de la base de données dans notre settings.py
, donc EVE a terminé la requête en utilisant l'instance en cours d'exécution de MongoDB
. Connectons-nous à MongoDB
shell et voir l'enregistrement nouvellement créé. Avec l'instance MongoDB en cours d'exécution, déclenchez le shell mongo :
mongo
Une fois à l'intérieur du mongo
shell, liste toutes les bases de données disponibles.
show databases;
Il doit y avoir une eve
base de données. Passer à la eve
base de données.
use eve;
Exécutez le show
commande pour lister les tables à l'intérieur du eve
base de données.
show tables;
Les tables listées doivent avoir une table appelée user
. Répertorier les enregistrements de l'user
table à l'aide de la commande suivante :
db.user.find()
Voici les enregistrements sélectionnés dans les tables utilisateur :
Valider l'API utilisateur
Ensuite, nous allons créer une API pour valider un utilisateur existant. Normalement, si nous faisons un get
demande au point de terminaison de l'utilisateur (http://127.0.0.1:5000/user), il donnera les détails de tous les utilisateurs enregistrés à partir de la base de données. Nous devons mettre en œuvre deux choses ici. Nous devons d'abord authentifier un utilisateur à l'aide de son prénom et de son mot de passe, puis nous devons renvoyer les détails de l'utilisateur à partir de la base de données une fois l'authentification réussie.
Afin d'obtenir des détails basés sur le prénom, nous devons ajouter un champ de recherche supplémentaire dans le DOMAIN
dans settings.py
.
'additional_lookup': { 'url': 'regex("[\w]+")', 'field': 'username', }
Comme on le voit dans le code ci-dessus, nous avons ajouté un champ de recherche pour username
. Désormais, lorsqu'une requête GET est envoyée à http://127.0.0.1:5000/user/
<username>
il renverra les détails de l'utilisateur avec le username
particulier . Lorsque vous faites une demande à un utilisateur particulier, nous envoyons également le username
et password
pour l'authentification.
Nous ferons une authentification de base pour vérifier un utilisateur particulier en fonction du nom d'utilisateur et du mot de passe. Tout d'abord, nous devons importer le Basic Auth
classe d'EVE. Créez une classe appelée Authenticate
pour implémenter l'authentification comme indiqué :
from eve.auth import BasicAuth class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method):
Maintenant, lorsque la ressource est user
et la méthode de requête est GET
, nous authentifierons l'utilisateur. En cas d'authentification réussie, les détails de l'utilisateur avec le prénom dans le point de terminaison de l'API seront renvoyés. Nous limiterons également la création d'utilisateurs en fournissant un nom d'utilisateur et un mot de passe. Ainsi, si la méthode est POST et que le point de terminaison de l'API est utilisateur, nous vérifierons et validerons le nom d'utilisateur et le mot de passe. Alors, voici l'Authenticate
complet classe :
class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method): if resource == 'user' and method == 'GET': user = app.data.driver.db['user'] user = user.find_one({'username': username,'password':password}) if user: return True else: return False elif resource == 'user' and method == 'POST': return username == 'admin' and password == 'admin' else: return True
Nous devons passer le Authenticate
nom de classe lors du lancement de l'API. Modifiez donc le code de lancement de l'API comme indiqué :
if __name__ == '__main__': app = Eve(auth=Authenticate) app.run()
Enregistrez toutes les modifications et exécutez le api.py
. Essayez d'envoyer une demande d'authentification de base avec un nom d'utilisateur et un mot de passe de Postman à http://127.0.0.1/user/username (remplacez username par tout autre nom d'utilisateur existant). Une fois l'authentification réussie, vous devriez obtenir les détails de l'utilisateur en réponse, comme indiqué :
Ajouter, supprimer et mettre à jour des éléments
API Ajouter un article
Pour créer une API d'ajout d'élément, il nous suffit de créer un nouveau schéma pour l'élément dans settings.py
.
'item': { 'schema': { 'name':{ 'type': 'string' }, 'username': { 'type': 'string' } } }
L'API Ajouter un article aiderait chaque utilisateur connecté à ajouter un article. Nous enregistrerons l'élément avec le nom d'utilisateur de l'utilisateur qui a saisi l'élément. Enregistrez les modifications et essayez de faire une requête POST à http://127.0.0.1/item comme indiqué :
API de suppression d'article
Pour supprimer un élément créé par un utilisateur, il suffit d'appeler le point de terminaison de l'élément /item_id
. Mais le simple fait d'appeler une requête DELETE ne supprimera pas l'élément. Pour supprimer un article, nous devons également fournir un _etag
liés à un élément particulier. Une fois item id
et _etag
match, l'élément est supprimé de la base de données. Voici comment la méthode DELETE est appelée dans le point de terminaison de l'élément.
Mettre à jour l'API de l'article
L'API de mise à jour est similaire à l'API de suppression. Tout ce que nous avons à faire est d'envoyer une requête PATCH avec le item id
et _etag
et les champs du formulaire qui doivent être mis à jour. Voici comment les détails de l'article sont mis à jour :