Frontend und Backend
Beginnen wir in der richtigen Reihenfolge. Was sind Frontend und Backend? Die Site hat zwei Seiten: vorne und innen. Der erste ist normalerweise für die visuelle Anordnung der Objekte auf der Seite verantwortlich (wo sind welche Bilder, wo ist welcher Text und wo sind welche Schaltflächen). Der zweite ist für „Aktionen“ verantwortlich. Normalerweise sind dies Klicks auf dieselben Schaltflächen oder auf andere „Dinge“ auf der Website. Sie gehen beispielsweise zur Seite Ihres bevorzugten sozialen Netzwerks und müssen sich zuerst in Ihrem Konto anmelden. Auf der Vorderseite (Frontend) geben Sie Ihren Benutzernamen und Ihr Passwort ein und klicken auf die Schaltfläche "Login". Zu diesem Zeitpunkt wird die Anforderung an die Datenbank gesendet, um die Existenz eines solchen Benutzers zu überprüfen. Wenn dies erfolgreich ist, werden Sie unter Ihrem Konto zum sozialen Netzwerk weitergeleitet. Andernfalls wird eine Fehlermeldung angezeigt. In diesem Fall ist das Backend im Wesentlichen für das Senden der Anforderung an die Datenbank verantwortlich.Es ist normalerweise in drei Unterteile unterteilt:
- Web-API zum Akzeptieren von Anfragen
- Geschäftslogik zur Bearbeitung von Anfragen
- Interaktion mit der Datenbank
In diesem Artikel werden wir hauptsächlich über API oder Anwendungsprogrammierschnittstelle und ein wenig über Geschäftslogik sprechen. Aber zuerst erstellen wir einen Server.
Erstellen Sie Ihren eigenen Server
So sieht die einfachste Python-Server-Anwendung mit dem Flask-Framework aus:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, World!"
app.run()
Es gibt bereits eine leere Route („/“). Wenn Sie diese Anwendung ausführen und den Browser auf Seite 127.0.0.1 : 5000 öffnen , wird die Aufschrift „Hallo Welt!“ Angezeigt. Auf der Serverseite wird die folgende Meldung
angezeigt : 127.0.0.1 - - [07 / Aug / 2020 20:32:16] "GET / HTTP / 1.1" 200 - Wenn wir also zu diesem Link im Browser (Client) gehen, tun wir dies Eine GET-Anfrage an unseren Server und wir gelangen in die Indexfunktion - von hier aus wird "Hallo Welt!" Sie können andere Abfragen (viel komplexer) entlang anderer Routen hinzufügen (oder nicht unbedingt). Wie gesagt, in diesem Fall haben wir eine GET-Anforderung verwendet - die Standardvorgabe. Aber es gibt viele andere, von denen die beliebtesten POST, PUT, DELETE sind. Aber warum ist das notwendig?
Read Read Update Delete erstellen
Erstens steht REST für REpresentational State Transfer (oder auf einfachere Weise für REpresentational State Transfer). Tatsächlich ist die Definition von REST selbst nicht so wichtig, wird jedoch normalerweise mit einem anderen Akronym verknüpft - CRUD - Create Read Update Delete. Ganz am Anfang habe ich ein Beispiel für eine Datenbank gegeben, und diese vier Operationen sind ein wesentlicher Bestandteil der Arbeit damit (gut oder nur mit Daten).
Zweitens muss eine REST- oder RESTfull-API die Behandlung dieser vier Aktionen unterstützen. Hier bieten sich die Methoden GET, POST, PUT und DELETE an. In der Regel (nicht unbedingt!) Wird die POST-Methode verwendet, um neue Daten hinzuzufügen (Erstellen), GET - Lesen (Lesen), PUT - Vorhandene Daten aktualisieren (Aktualisieren) bzw. LÖSCHEN (Löschen). Zum Beispiel kann dieselbe Kolbenanwendung wie folgt neu gestaltet werden:
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["POST", "GET", "PUT", "DELETE"])
def index():
if request.method == "POST":
#
if request.method == "GET":
#
if request.method == "PUT":
#
if request.method == "DELETE":
#
app.run()
Dies ist die primitive REST-API. Die Frontend-Seite kann jetzt Anfragen senden und je nach Typ werden wir weitere Maßnahmen ergreifen.
Mit Daten arbeiten
Unsere aktuelle Anwendung ist überhaupt nicht interessant - es wäre schön, mit einigen Daten zu arbeiten. Dazu müssen Sie überlegen, wie Sie sie übertragen können. Der beliebteste Weg ist das JSON-Format (Sie können jedoch auch andere verwenden, z. B. XML). Es ist analog zu einem Wörterbuch in Python und sehr einfach zu bedienen. Ich werde primitive Daten für ein Beispiel mit Autorisierung in einem sozialen Netzwerk verwenden:
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
Wir haben Daten, in denen es bisher zwei Benutzer gibt (login1 und login2), und wir werden dieses Datum CRUD. Es sollte gesagt werden, dass alle vier Methoden selten auf derselben Route arbeiten und dies normalerweise tun: Für die GET-Methoden (alle Benutzer zurückgeben) und den POST wird die Route verwendet, z. B. "/ users", und für die GET-Methoden (einen Benutzer zurückgeben durch) seine ID), PUT und DELETE "/ users / id". Es sollte auch beachtet werden, dass wir zum Aktualisieren und Erstellen neuer Benutzer Daten über diese im Anfragetext (request.json) erhalten. Jetzt kann unser Programm wie folgt umgeschrieben werden:
from flask import Flask, request
app = Flask(__name__)
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
@app.route("/users", methods=["POST", "GET"])
def work_with_users():
if request.method == "POST":
data[max(data.keys())+1] = request.json
return {"message": "User was created"}, 201
if request.method == "GET":
return data, 200
@app.route("/users/<int:user_id>", methods=["GET", "PUT", "DELETE"])
def work_with_user_by_id(user_id):
if request.method == "GET":
return data[user_id], 200
if request.method == "PUT":
data[user_id]["login"] = request.json["login"]
data[user_id]["password"] = request.json["password"]
return {"message": "User was updated"}, 200
if request.method == "DELETE":
data.pop(user_id)
return {"message": "User was deleted"}, 200
app.run()
Es gibt viele Programme zum Testen von Anfragen (Postman, Fiddler, Insomnia ...) und ich empfehle Ihnen, sich mit einem davon vertraut zu machen (persönlich ist Postman mein Favorit). Mit ihrer Hilfe können Sie sehen, was als Ergebnis der Anfrage kommt und mit welchem Statuscode (Nummern 200/201 im Gegenzug). Sie können das Senden von Daten auch inszenieren, indem Sie sie dem Anforderungshauptteil hinzufügen.
Es ist auch erwähnenswert, dass dieser Ansatz derzeit nicht verwendet wird und normalerweise die Bibliothek flask-restplus (oder flask-restx, die ihn ersetzt hat) verwendet wird, aber ich denke, dass Sie sich zuerst mit reinem Kolben vertraut machen müssen. Es ist auch notwendig, die Verfügbarkeit der Daten und ihre Richtigkeit zu überprüfen und in den entgegengesetzten Fällen die Rückgabe eines Fehlers vorzusehen.
Fazit
REST-APIs sind einfach CRUD-Methoden, auf die die Clientseite der Site entlang bestimmter Routen zugreift. Nach Gehör und Blick ist dies möglicherweise schwer zu erkennen. Ich empfehle daher, Ihren eigenen Server analog zum Beispiel zu schreiben. Persönlich finde ich Kolben eines der einfachsten Frameworks dafür, und wenn Sie ein Anfänger sind, dann rate ich Ihnen, es zu versuchen.