Python ist eine der am einfachsten zu lesenden und am einfachsten zu schreibenden Programmiersprachen aller Zeiten. Im Laufe der Jahre hat die Popularität von Python nur zugenommen und es wird häufig in der Entwicklung von Webanwendungen, beim Skripting, beim Erstellen von Spielen, beim wissenschaftlichen Rechnen usw. verwendet.
Flask ist ein Framework für Python-Webanwendungen, das aufgrund seiner Benutzerfreundlichkeit für Python-Anfänger immer beliebter wird. In diesem Tutorial werfen wir einen Blick auf EVE, ein Framework zum Erstellen von REST-APIs, das auf Flask, MongoDB und Redis basiert. Aus den offiziellen Dokumenten:
Unterstützt von Flask, MongoDB, Redis und guten Absichten ermöglicht Eve die mühelose Erstellung und Bereitstellung hochgradig anpassbarer, voll ausgestatteter RESTful-Webdienste.
Was wir erstellen werden
In dieser Anleitung erfahren Sie, wie Sie REST-APIs mit dem EVE-Framework erstellen. Als Nächstes entwerfen wir mit AngularJS das Frontend für eine einfache App und machen es funktionsfähig, indem wir die mit EVE erstellten REST-APIs nutzen. In diesem Tutorial implementieren wir die folgende Funktionalität:
- Benutzer-API erstellen
- Benutzer-API validieren
- Elemente-API hinzufügen
- API zum Löschen von Elementen
- Elemente-API aktualisieren
Erste Schritte
Installation
Wir werden pip verwenden, um EVE zu installieren.
pip install eve
Wir verwenden MongoDB
als Datenbank. Werfen Sie einen Blick auf die offiziellen Dokumente zur Installation gemäß Ihrem System.
Erstellen der Basis-API
Erstellen Sie einen Projektordner namens PythonAPI
. Navigieren Sie zu PythonAPI
und erstellen Sie eine Datei namens api.py
. Innerhalb von api.py
importiere EVE
und erstelle ein EVE-Objekt.
from eve import Eve app = Eve()
Führen Sie als Nächstes app
aus wenn das Programm als Hauptprogramm ausgeführt wird.
from eve import Eve app = Eve() if __name__ == '__main__': app.run()
Führen Sie Ihre MongoDB
aus mit dem folgenden Befehl:
mongod --dbpath= <PATH-TO> /data/db/
Wie Sie sehen können, müssen wir einen Pfad für die db-Dateien angeben. Erstellen Sie einfach data/db
in Ihrem Dateisystem und führen Sie den obigen Befehl aus.
Zusammen mit einer Instanz von MongoDB
läuft, benötigt EVE eine Konfigurationsdatei mit Informationen über die API-Ressourcen. Also in der PythonAPI
Ordner eine weitere Datei namens settings.py
erstellen und fügen Sie den folgenden Code hinzu:
DOMAIN = {'user': {}}
Der obige Code informiert EVE darüber, dass eine Ressource für user
ist verfügbar.
Speichern Sie alle Dateien und führen Sie api.py
aus :
python api.py
Die API sollte wie gezeigt online sein:
Wir verwenden den Postman REST Client, um Anfragen an die APIs zu senden. Es ist kostenlos und kann mit einem einfachen Klick installiert werden. Starten Sie nach Abschluss der Installation die App, geben Sie die API-URL (http://127.0.0.1:5000/) ein und klicken Sie auf Senden. Sie sollten die folgende Antwort erhalten:
Da wir keine bestimmte API-Ressource aufgerufen haben, werden alle verfügbaren Ressourcen angezeigt. Versuchen Sie nun, user
anzurufen Ressource und Sie sollten die Antwort speziell für den user
haben .
Benutzer-API erstellen und validieren
Benutzer-API erstellen
Wir beginnen mit dem Erstellen einer API, um einen Benutzer für unsere Anwendung zu erstellen oder zu registrieren. Der Benutzer hätte bestimmte Felder wie First Name
, Last Name
, Username
, Password
und Phone Number
.
Also müssen wir zuerst ein Schema für einen Benutzer definieren. Schema definiert die Felder und Datentypen der Schlüsselfelder. Öffnen Sie settings.py
und ändern Sie die DOMAIN
indem Sie ein Schema wie gezeigt definieren:
DOMAIN = { 'user': { 'schema': { 'firstname': { 'type': 'string' }, 'lastname': { 'type': 'string' }, 'username': { 'type': 'string', 'unique': True }, 'password': { 'type': 'string' }, 'phone': { 'type': 'string' } } } }
Wie Sie im obigen Code sehen können, haben wir die Schlüsselfelder definiert, die zum Erstellen eines Benutzers und seines im Schema definierten Datentyps erforderlich sind. Speichern Sie die Änderungen und führen Sie api.py
aus . Versuchen Sie vom Postman-Client, eine POST-Anforderung zusammen mit den erforderlichen Parametern an http://127.0.0.1/user zu senden, wie gezeigt:
Bei einer POST-Anforderung an den Benutzer wurde ein 405 Method Not Allowed
ausgelöst Error. Standardmäßig akzeptiert EVE nur GET-Anfragen. Wenn wir eine andere Methode verwenden möchten, müssen wir sie explizit definieren. Öffnen Sie settings.py
und definieren Sie die Ressourcenmethoden wie gezeigt:
RESOURCE_METHODS = ['GET', 'POST']
Speichern Sie die Änderungen und führen Sie api.py
aus . Versuchen Sie nun erneut, POST
zu senden an den Benutzer und Sie sollten die folgende Antwort erhalten:
Wie Sie sehen können, war die obige POST-Anfrage erfolgreich. Wir haben die Datenbankkonfigurationen nicht in unserer settings.py
definiert , also hat EVE die Anfrage mit der laufenden Instanz von MongoDB
abgeschlossen . Melden wir uns bei MongoDB
an Shell und sehen Sie sich den neu erstellten Datensatz an. Lösen Sie bei laufender MongoDB-Instanz die Mongo-Shell aus:
mongo
Einmal im mongo
Shell alle verfügbaren Datenbanken auflisten.
show databases;
Es muss einen eve
geben Datenbank. Wechseln Sie zu eve
Datenbank.
use eve;
Führen Sie die show
aus Befehl, um die Tabellen in eve
aufzulisten Datenbank.
show tables;
Die aufgelisteten Tabellen müssen eine Tabelle namens user
haben . Listen Sie die Datensätze des user
auf Tabelle mit dem folgenden Befehl:
db.user.find()
Hier sind die ausgewählten Datensätze aus den Benutzertabellen:
Benutzer-API validieren
Als Nächstes erstellen wir eine API, um einen vorhandenen Benutzer zu validieren. Normalerweise, wenn wir ein get
machen Anfrage an den Benutzerendpunkt (http://127.0.0.1:5000/user), gibt er Details aller registrierten Benutzer aus der Datenbank aus. Hier müssen wir zwei Dinge umsetzen. Erstens müssen wir einen Benutzer mit Vorname und Passwort authentifizieren und zweitens müssen wir die Benutzerdetails bei erfolgreicher Authentifizierung aus der Datenbank zurückgeben.
Um Details basierend auf dem Vornamen zu erhalten, müssen wir ein zusätzliches Nachschlagefeld in der DOMAIN
hinzufügen in settings.py
.
'additional_lookup': { 'url': 'regex("[\w]+")', 'field': 'username', }
Wie im obigen Code zu sehen, haben wir ein Nachschlagefeld für username
hinzugefügt . Wenn jetzt eine GET-Anfrage an http://127.0.0.1:5000/user/
gesendet wird <username>
es gibt die Details des Benutzers mit dem bestimmten username
zurück . Wenn Sie eine Anfrage an einen bestimmten Nutzer stellen, senden wir auch den username
und Password
zur Authentifizierung.
Wir führen eine einfache Authentifizierung durch, um einen bestimmten Benutzer basierend auf Benutzername und Passwort zu verifizieren. Zuerst müssen wir den Basic Auth
importieren Klasse von EVE. Erstellen Sie eine Klasse namens Authenticate
um die Authentifizierung wie gezeigt zu implementieren:
from eve.auth import BasicAuth class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method):
Nun, wenn die Ressource user
ist und die Anfragemethode ist GET
, authentifizieren wir den Benutzer. Bei erfolgreicher Authentifizierung werden die Benutzerdetails des Benutzers mit dem Vornamen im API-Endpunkt zurückgegeben. Wir schränken auch die Benutzererstellung ein, indem wir einen Benutzernamen und ein Passwort angeben. Wenn also die Methode POST und der API-Endpunkt user ist, prüfen und validieren wir den Benutzernamen und das Passwort. Hier ist also die vollständige Authenticate
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
Wir müssen den Authenticate
übergeben Klassenname beim Initiieren der API. Ändern Sie also den API-Initiierungscode wie gezeigt:
if __name__ == '__main__': app = Eve(auth=Authenticate) app.run()
Speichern Sie alle Änderungen und führen Sie api.py
aus . Versuchen Sie, eine einfache Authentifizierungsanfrage mit einem Nutzernamen und einem Passwort von Postman an http://127.0.0.1/user/username zu senden (ersetzen Sie den Nutzernamen durch einen anderen vorhandenen Nutzernamen). Bei erfolgreicher Authentifizierung sollten Sie die Benutzerdetails wie gezeigt als Antwort erhalten:
Elemente hinzufügen, löschen und aktualisieren
Element-API hinzufügen
Um eine API zum Hinzufügen von Artikeln zu erstellen, müssen wir lediglich ein neues Schema für den Artikel in settings.py
erstellen .
'item': { 'schema': { 'name':{ 'type': 'string' }, 'username': { 'type': 'string' } } }
Die API zum Hinzufügen von Artikeln würde jedem angemeldeten Benutzer helfen, einen Artikel hinzuzufügen. Wir speichern das Element zusammen mit dem Benutzernamen des Benutzers, der das Element eingegeben hat. Speichern Sie die Änderungen und versuchen Sie, eine POST-Anfrage an http://127.0.0.1/item zu senden, wie hier gezeigt:
Element-API löschen
Um ein von einem Benutzer erstelltes Element zu löschen, müssen wir lediglich den Elementendpunkt /item_id
aufrufen . Das einfache Aufrufen einer DELETE-Anforderung löscht das Element jedoch nicht. Um ein Element zu löschen, müssen wir auch einen _etag
angeben auf einen bestimmten Artikel bezogen. Einmal item id
und _etag
übereinstimmen, wird das Element aus der Datenbank gelöscht. So wird die DELETE-Methode im Elementendpunkt aufgerufen.
Element-API aktualisieren
Die Update-API ähnelt der Delete-API. Alles, was wir tun müssen, ist eine PATCH-Anfrage mit der item id
zu senden und _etag
und die Formularfelder, die aktualisiert werden müssen. So werden die Artikeldetails aktualisiert: