Construction d'API REST à l'aide d'EVE

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.

Ce que nous allons créer

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:

  • Créer une API utilisateur
  • Valider l'API utilisateur
  • API Ajouter des éléments
  • API de suppression d'éléments
  • API de mise à jour d'éléments

Commencer

Installation

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éation de l'API de base

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.

Créer et valider une 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 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:

Valider l'API 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é:

Ajouter, supprimer et mettre à jour des éléments 

Ajouter un élément API

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é:

API de suppression d'élément

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.

API de mise à jour d'élément

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:

Conclusion

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!