MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

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