Was ist die REST-API?

Aus der Ferne wird die REST-API benötigt, um eine Website zu erstellen. Aber das erfordert doch eine Menge Dinge (sagen Sie) - in welchem ​​Teil der REST-API?



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:



  1. Web-API zum Akzeptieren von Anfragen
  2. Geschäftslogik zur Bearbeitung von Anfragen
  3. 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.



All Articles