sql >> Database teknologi >  >> NoSQL >> MongoDB

Opbygning af REST API'er ved hjælp af EVE

Python er et af de mest letlæselige og nemme at skrive programmeringssprog nogensinde. I årenes løb er Pythons popularitet kun steget, og det er meget udbredt til udvikling af webapplikationer, scripting, skabelse af spil, videnskabelig databehandling osv.

Flask er en Python-webapplikationsramme, som vinder popularitet på grund af dens brugervenlighed for Python-begyndere. I denne tutorial vil vi se på EVE, en REST API-bygningsramme baseret på Flask, MongoDB og Redis. Fra de officielle dokumenter:

Drevet af Flask, MongoDB, Redis og gode hensigter Eve tillader ubesværet at bygge og implementere meget tilpasselig, fuldt udstyret RESTful Web Service.

Hvad vi vil skabe

I dette selvstudie vil vi se, hvordan du opbygger REST API'er ved hjælp af EVE-rammen. Dernæst vil vi ved hjælp af AngularJS designe frontenden til en simpel app og gøre den funktionel ved at bruge REST API'erne bygget ved hjælp af EVE. I denne øvelse implementerer vi følgende funktionalitet:

  • Opret bruger-API
  • Valider User API
  • Add Items API
  • Slet Items API
  • Opdater Items API

Kom godt i gang

Installation

Vi bruger pip til at installere EVE.

pip install eve

Vi bruger MongoDB som database. Tag et kig på de officielle dokumenter til installation i henhold til dit system.

Oprettelse af Basic API

Opret en projektmappe kaldet PythonAPI . Naviger til PythonAPI og opret en fil kaldet api.py . Inde i api.py importer EVE og opret et EVE-objekt.

from eve import Eve
app = Eve()

Kør derefter app når programmet køres som et hovedprogram.

from eve import Eve
app = Eve()

if __name__ == '__main__':
    app.run()

Kør din MongoDB ved at bruge følgende kommando:

mongod --dbpath= <PATH-TO> /data/db/

Som du kan se, skal vi angive en sti til db-filerne. Du skal blot oprette data/db i dit filsystem og kør kommandoen ovenfor.

Sammen med en forekomst af MongoDB kører, kræver EVE en konfigurationsfil med information om API-ressourcerne. Så i PythonAPI mappe oprette en anden fil kaldet settings.py og tilføj følgende kode:

DOMAIN = {'user': {}}

Ovenstående kode informerer EVE om, at en ressource for bruger er tilgængelig.

Gem alle filerne og kør api.py :

python api.py

API'et skal være online som vist:

Vi bruger Postman REST Client til at sende anmodninger til API'erne. Det er gratis og kan installeres med et enkelt klik. Når du er færdig med installationen, skal du starte appen og indtaste API-URL'en (http://127.0.0.1:5000/) og klikke på send. Du skal have svaret som vist:

Da vi ikke har kaldt nogen specifik API-ressource, vil den vise alle de tilgængelige ressourcer. Prøv nu at ringe til brugeren ressource, og du bør have svaret specifikt for brugeren .

Opret og valider bruger-API

Opret bruger-API

Vi starter med at bygge en API for at oprette eller registrere en bruger til vores applikation. Brugeren vil have visse felter som Fornavn , Efternavn , Brugernavn , Adgangskode og Telefonnummer .

Så først bliver vi nødt til at definere et skema for en bruger. Skema definerer felterne og datatyperne for nøglefelterne. Åbn settings.py og rediger DOMAIN ved at definere et skema som vist :

DOMAIN = {
    'user': {
        'schema': {
            'firstname': {
                'type': 'string'
            },
            'lastname': {
                'type': 'string'
            },
            'username': {
                'type': 'string',
                 'unique': True
            },
            'password': {
                'type': 'string'
            },
            'phone': {
                'type': 'string'
            }
        }
    }
}

Som du kan se i ovenstående kode, har vi defineret de nøglefelter, der er nødvendige for at oprette en bruger, og dens datatype defineret i skemaet. Gem ændringerne, og kør api.py . Prøv at lave en POST-anmodning fra Postman Client sammen med de nødvendige parametre til http://127.0.0.1/user som vist:

På POST-anmodning til brugeren sendte den en 405-metode ikke tilladt fejl. Som standard accepterer EVE kun GET-anmodninger. Hvis vi vil bruge en anden metode, skal vi definere det eksplicit. Åbn settings.py og definer ressourcemetoderne som vist :

RESOURCE_METHODS = ['GET', 'POST']

Gem ændringerne, og kør api.py . Prøv nu igen at POST til bruger, og du skal have nedenstående svar:

Som du kan se, var ovenstående POST-anmodning vellykket. Vi har ikke defineret databasekonfigurationerne i vores settings.py , så EVE fuldførte anmodningen ved at bruge den kørende instans af MongoDB . Lad os logge ind på MongoDB shell og se den nyoprettede post. Mens MongoDB-instansen kører, udløser du mongo-skallen:

mongo

Når du er inde i mongo shell, skal du liste alle de tilgængelige databaser.

show databases;

Der skal være en eve database. Skift til eve database.

use eve;

Udfør show kommando for at liste tabellerne inde i eve database.

show tables;

De anførte tabeller skal have en tabel kaldet bruger . Liste registreringerne fra brugeren tabel ved hjælp af følgende kommando:

db.user.find()

Her er de valgte poster fra brugertabellerne:

Valider User API

Dernæst opretter vi en API for at validere en eksisterende bruger. Normalt, hvis vi laver en get anmodning til brugerens slutpunkt (http://127.0.0.1:5000/bruger), vil det give oplysninger om alle registrerede brugere fra databasen. Vi skal implementere to ting her. Først skal vi godkende en bruger ved hjælp af fornavn og adgangskode, og for det andet skal vi returnere brugeroplysningerne fra databasen efter vellykket godkendelse.

For at få detaljer baseret på fornavnet skal vi tilføje et ekstra opslagsfelt i DOMÆNE i settings.py .

'additional_lookup': {
            'url': 'regex("[\w]+")',
            'field': 'username',
            }

Som det ses i ovenstående kode, har vi tilføjet et opslagsfelt for brugernavn . Når nu en GET-anmodning sendes til http://127.0.0.1:5000/user/ det vil returnere oplysningerne om brugeren med det særlige brugernavn . Når vi sender en anmodning til en bestemt bruger, sender vi også brugernavnet og adgangskode til godkendelse.

Vi laver grundlæggende godkendelse for at bekræfte en bestemt bruger baseret på brugernavn og adgangskode. Først skal vi importere Basic Auth klasse fra EVE. Opret en klasse kaldet Authenticate for at implementere godkendelsen som vist:

from eve.auth import BasicAuth

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
                   

Nu, når ressourcen er bruger og anmodningsmetoden er GET , godkender vi brugeren. Ved vellykket godkendelse returneres brugeroplysningerne for brugeren med fornavn i API-slutpunktet. Vi vil også begrænse brugeroprettelse ved at angive et brugernavn og en adgangskode. Så hvis metoden er POST, og API-endepunktet er bruger, kontrollerer og validerer vi brugernavnet og adgangskoden. Så her er den komplette Godkend klasse:

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

Vi skal videregive Authenticate klassenavn, mens API'en startes. Så modificer API-initieringskoden som vist:

if __name__ == '__main__':
    app = Eve(auth=Authenticate)
    app.run()

Gem alle ændringerne og udfør api.py . Prøv at sende en grundlæggende godkendelsesanmodning med et brugernavn og en adgangskode fra Postman til http://127.0.0.1/user/username (erstat brugernavnet med et hvilket som helst andet eksisterende brugernavn). Ved vellykket godkendelse bør du få brugeroplysningerne som svar som vist:

Tilføj, slet og opdater elementer 

Tilføj Item API

For at kunne oprette en Tilføj element API er alt, hvad vi skal gøre, at oprette et nyt skema for element i settings.py .

'item': {
        'schema': {
            'name':{
                'type': 'string'
                },
            'username': {
                'type': 'string'
                }
            }
        }

Add Item API'en vil hjælpe hver logget ind bruger med at tilføje et element. Vi gemmer elementet sammen med brugernavnet på den bruger, der indtastede elementet. Gem ændringerne, og prøv at lave en POST-anmodning til http://127.0.0.1/item som vist:

Slet Item API

For at slette et element, der er oprettet af en bruger, skal vi blot kalde elementets slutpunkt /item_id . Men blot at kalde en DELETE-anmodning vil ikke slette elementet. For at slette et element skal vi også angive et _etag relateret til en bestemt vare. En gang item id og _etag match, slettes elementet fra databasen. Her er, hvordan DELETE-metoden kaldes i item endpoint.

Opdater Item API

Update API ligner Slet API. Alt vi skal gøre er at sende en PATCH-anmodning med item id og _etag og formularfelterne, som skal opdateres. Sådan opdateres vareoplysningerne:


  1. Find duplikerede poster i MongoDB

  2. Bull kø:Når et job fejler, hvordan stopper man køen i at behandle resterende job?

  3. Mongo push til array inde i array

  4. JHipster Redis Integrationselement ubundet fejl