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 que croître et elle est largement utilisée dans le développement d’applications Web, la création de scripts, la création de jeux, l’informatique scientifique, etc..
Flask est un framework d'applications 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. De la documentation officielle:
Propulsé 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.
Dans ce didacticiel, nous verrons comment construire des API REST à l'aide de la structure EVE. Ensuite, en utilisant AngularJS, nous allons concevoir le front-end d’une application simple et le rendre fonctionnel en utilisant les API REST construites à l’aide de EVE. Dans ce tutoriel, nous allons implémenter les fonctionnalités suivantes:
Nous allons utiliser pip pour installer EVE.
pip install eve
Nous allons utiliser MongoDB
comme base de données. Jetez un coup d’œil aux docs officiels pour l’installation selon votre système.
Créez un dossier de projet appelé PythonAPI
. Aller vers PythonAPI
et créez un fichier appelé api.py
. À l'intérieur api.py
importation VEILLE
et créer un objet EVE.
depuis veille import Eve app = Eve ()
Ensuite, lancez app
quand le programme est exécuté en tant que programme principal.
from eve import Eve app = Eve () si __name__ == '__main__': app.run ()
Courez votre MongoDB
en utilisant la commande suivante:
mongod --dbpath =/ data / db /
Comme vous pouvez le constater, nous devons spécifier un chemin pour les fichiers de base de données. 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 requiert un fichier de configuration contenant des informations sur les ressources de l’API. Donc dans le PythonAPI
dossier créer un autre fichier appelé settings.py
et ajoutez le code suivant:
DOMAIN = 'utilisateur':
Le code ci-dessus informe EVE qu’une ressource pour utilisateur
est disponible.
Enregistrez tous les fichiers et exécutez api.py
:
python api.py
L'API doit être en ligne comme indiqué:
Nous allons utiliser le client REST Postman pour envoyer des demandes aux API. C'est gratuit et peut être installé en un simple clic. Une fois l'installation terminée, lancez l'application, 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 d’API spécifique, toutes les ressources disponibles seront affichées. Maintenant, essayez d'appeler le utilisateur
ressource et vous devriez avoir la réponse spécifique à la 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 Prénom
, Nom de famille
, Nom d'utilisateur
, Mot de passe
et Numéro de téléphone
.
Nous devons donc d’abord définir un schéma pour un utilisateur. Schéma définit les champs et les types de données des champs clés. S'ouvrir settings.py
et modifier le DOMAINE
en définissant un schéma comme indiqué:
DOMAIN = 'utilisateur': 'schéma': 'prénom': 'type': 'chaîne', 'nom': 'type': 'chaîne', 'nomutilisateur': 'type': 'chaîne', 'unique': True, 'mot de passe': 'type': 'chaîne', 'téléphone': 'type': 'chaîne'
Comme vous pouvez le constater dans le code ci-dessus, nous avons défini les champs de clé nécessaires à la création d'un utilisateur et son type de données défini dans le schéma. Enregistrez les modifications et exécutez api.py
. Depuis le client Postman, essayez de faire une demande POST avec les paramètres requis à http://127.0.0.1/user, comme indiqué:
Sur demande POST à l'utilisateur, il a jeté un 405 Méthode non autorisée
Erreur. Par défaut, EVE accepte uniquement les demandes GET. Si nous voulons utiliser une autre méthode, nous devons la définir explicitement. Ouvrir settings.py
et définissez les méthodes de ressources comme indiqué:
RESOURCE_METHODS = ['GET', 'POST']
Enregistrez les modifications et exécutez api.py
. Maintenant, essayez à nouveau de POSTER
à l'utilisateur et vous devriez avoir la réponse ci-dessous:
Comme vous pouvez le constater, la requête POST ci-dessus a abouti. Nous n'avons pas défini les configurations de base de données dans notre settings.py
, alors EVE a complété la demande en utilisant l'instance en cours d'exécution de MongoDB
. Connectons-nous au 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.
montrer des bases de données;
Il doit y avoir un veille
base de données. Basculer vers le veille
base de données.
utiliser eve;
Exécuter le spectacle
commande pour lister les tables à l'intérieur du veille
base de données.
montrer des tables;
Les tables listées doivent avoir une table appelée utilisateur
. Listez les enregistrements de la utilisateur
table en utilisant la commande suivante:
db.user.find ()
Voici les enregistrements sélectionnés dans les tables utilisateur:
Nous allons ensuite créer une API pour valider un utilisateur existant. Normalement, si nous faisons un obtenir
requête au point de terminaison de l'utilisateur (http://127.0.0.1:5000/user), il donnera des détails sur tous les utilisateurs enregistrés de la base de données. Nous devons mettre en œuvre deux choses ici. Tout d'abord, nous devons authentifier un utilisateur à l'aide de son nom d'utilisateur et de son mot de passe. Deuxièmement, nous devons renvoyer les détails de l'utilisateur de la base de données en cas d'authentification réussie..
Pour obtenir des détails basés sur le prénom, nous devons ajouter un champ de recherche supplémentaire dans le champ DOMAINE
dans settings.py
.
'additional_lookup': 'url': 'regex ("[\ w] +")', 'field': 'nom d'utilisateur',
Comme indiqué dans le code ci-dessus, nous avons ajouté un champ de recherche pour Nom d'utilisateur
. Maintenant, quand une demande GET est envoyée au http://127.0.0.1:5000/user/
il renverra les détails de l'utilisateur avec le particulier Nom d'utilisateur
. Lorsque nous faisons une demande à un utilisateur particulier, nous envoyons également le message. Nom d'utilisateur
et mot de passe
pour l'authentification.
Nous allons effectuer une authentification de base pour vérifier un utilisateur particulier en fonction du nom d'utilisateur et du mot de passe. Premièrement, nous devons importer le Authentification de base
classe de EVE. Créez une classe appelée Authentifier
pour implémenter l'authentification comme indiqué:
depuis eve.auth import BasicAuth class Authenticate (BasicAuth): def check_auth (self, nom d'utilisateur, mot de passe, allowed_roles, resource, method):
Maintenant, quand la ressource est utilisateur
et la méthode de demande est OBTENIR
, nous allons authentifier l'utilisateur. En cas d'authentification réussie, les détails de l'utilisateur portant 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 la complète Authentifier
classe:
class Authenticate (BasicAuth): def check_auth (self, nom d'utilisateur, mot de passe, allowed_roles, ressource, méthode): if resource == 'utilisateur' et méthode == 'GET': utilisateur = app.data.driver.db ['utilisateur' ] user = user.find_one ('username': nom d'utilisateur, 'password': mot de passe) si user: return True else: return False elif resource == 'user' et method == 'POST': return username == ' admin 'et mot de passe ==' admin 'else: return True
Nous devons passer le Authentifier
nom de classe lors du lancement de l'API. Donc, modifiez le code initiant l’API comme indiqué:
si __name__ == '__main__': app = Eve (auth = Authentifier) app.run ()
Enregistrez toutes les modifications et exécutez la 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 le nom d’utilisateur par tout autre nom d’utilisateur existant). En cas d'authentification réussie, vous devriez obtenir les détails de l'utilisateur en réponse, comme indiqué:
Pour créer une API Add item, il suffit de créer un nouveau schéma pour item dans settings.py
.
'item': 'schema': 'name': 'type': 'string', 'nom d'utilisateur': 'type': 'string'
L'API Ajouter un élément aiderait chaque utilisateur connecté à ajouter un élément. Nous enregistrerons l'élément avec le nom d'utilisateur de l'utilisateur qui l'a entré. Enregistrez les modifications et essayez de faire une demande POST à http://127.0.0.1/item comme indiqué:
Pour supprimer un élément créé par un utilisateur, il suffit d'appeler le noeud final de l'élément. /ID de l'article
. Mais le simple fait d'appeler une demande DELETE ne supprimera pas l'élément. Pour supprimer un élément, nous devons également fournir un _etag
liée à un article particulier. Une fois que ID de l'article
et _etag
correspond, l'élément est supprimé de la base de données. Voici comment la méthode DELETE est appelée dans item end.
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 ID de l'article
et _etag
et les champs de formulaire qui doivent être mis à jour. Voici comment les détails de l'article sont mis à jour:
Dans ce didacticiel, nous avons vu comment commencer à créer des API à l'aide de la structure Python EVE. Nous avons créé des API de base pour les opérations CRUD que nous utiliserons dans la prochaine partie de la série lors de la création d'une application AngularJS..
Le code source de ce tutoriel est disponible sur GitHub.
Faites-nous savoir vos pensées dans les commentaires ci-dessous!