Erfahren Sie, wie Sie mit Flask und Postgres eine RESTful-API erstellen, die einen nahtlosen Datenaustausch zwischen Ihrer App und externen Systemen ermöglicht.

Anwendungsprogrammierschnittstellen (APIs) sind ein entscheidender Bestandteil beim Erstellen und Verbinden verschiedener Systeme, damit Ihre Anwendungen mit anderen Diensten kommunizieren und Daten austauschen können.

Während die Backend-Entwicklung mehr als nur das Schreiben von APIs umfasst, umfasst sie auch das Schreiben serverseitiger Geschäftslogik und das Entwerfen eines effizienten Systems Architekturen und anderen Schlüsselfunktionen lesen Sie weiter, um zu erfahren, wie Sie eine einfache CRUD-REST-API mit Flask (einem leichtgewichtigen Python-Framework) und Postgres erstellen Datenbank.

Verwenden von Flask zum Erstellen von Backend-APIs

Flasche ist ein Leichtgewicht Python-Framework Das bietet eine Reihe von Funktionen, um das Schreiben von Backend-APIs für Webclients zu vereinfachen, die mit verschiedenen Technologien wie React und Angular geschrieben wurden.

instagram viewer

Sie finden den Quellcode dieses Projekts darin GitHub-Repository.

Dieser Leitfaden führt Sie durch das Schreiben von a REST-API, die die vier CRUD-Operationen implementiert: Erstellen, Lesen, Aktualisieren und Löschen, um Benutzerdaten zu verwalten, die in einer Postgres-Datenbank gespeichert sind.

Richten Sie eine Postgres-Datenbank ein

Um zu beginnen, gehen Sie zu ElephantSQL, eine Cloud-basierte Datenbank-Hosting-Lösung, die eine Plattform bietet, um Postgres-Datenbanken in der Cloud zu erstellen und zu verwalten, sich anzumelden und sich auf der Übersichtsseite Ihres Kontos anzumelden.

Drücke den Neue Instanz erstellen Schaltfläche, um eine neue Instanz für Ihre Anwendung zu erstellen.

Geben Sie den Namen Ihrer Instanz an und wählen Sie den kostenlosen Plan aus. Wählen Sie schließlich die Region aus, in der die Instanz gehostet wird, um den Einrichtungsvorgang abzuschließen.

Navigieren Sie nach dem Erstellen der Instanz zur Einstellungsseite und kopieren Sie die Datenbank-URL, verwenden Sie es, um eine Verbindung mit der Datenbank herzustellen.

Richten Sie einen Flask-Server ein

Erstellen Sie auf Ihrem Terminal einen Projektordner und ändern Sie das aktuelle Verzeichnis in diesen neuen Ordner.

Bestätigen Sie vor der Installation von Flask, dass Sie Python Version 3.6+ auf Ihrem Computer ausführen. Wenn nicht, müssen Sie die neueste installieren Python Ausführung.

python --version

Anschließend installieren virtuelle Umgebung, um eine isolierte virtuelle Entwicklungsumgebung zu erstellen.

pip installiere virtualenv

Führen Sie als Nächstes den folgenden Befehl aus, um eine virtuelle Umgebung zu erstellen.

virtualenv venv

Aktivieren Sie abschließend die virtuelle Umgebung.

# Unter Windows: 
.\venv\Scripts\activate
# Unter Unix oder MacOS:
Quelle venv/bin/activate

Installieren Sie die erforderlichen Pakete

Erstellen Sie im Stammverzeichnis Ihres Projektordners eine Anforderungen.txt Datei und fügen Sie diese Pakete hinzu.

Flasche
python-dotenv
psycopg2-binär

Als nächstes installieren Sie die Pakete.

pip install -r requirements.txt

Der psycopg2-binär ist eine Python-Bibliothek, die als Middleware fungiert, damit Sie Verbindungen zu Ihrer Postgres-Datenbank herstellen und verschiedene Datenbankoperationen ausführen können.

Erstellen Sie zuletzt eine .env Datei und fügen Sie Ihre Datenbank-URL ein.

DATABASE_URL= Ihre Datenbank-URL

Erstellen Sie den Flask-Server

Erstellen Sie abschließend eine app.py Datei im Stammverzeichnis und fügen Sie den folgenden Code hinzu.

importieren os 
importieren psychopg2
aus dotenv importieren load_dotenv
aus Flasche importieren Flasche, Anfrage, jsonify

load_dotenv()

app = Flasche (__name__)
url = os.getenv("DATABASE_URL")
Verbindung = psycopg2.connect (URL)

@app.get("/")
defheim():
zurückkehren"Hallo Welt"

Dieser Code richtet eine Instanz der Flask-Anwendung ein. Anschließend stellt es eine Verbindung zu der in der URL-Zeichenfolge angegebenen Datenbank her und richtet schließlich eine Heimroute ein, die eine Zeichenfolge als Antwort zurückgibt.

Erstellen Sie die REST-API, die CRUD-Vorgänge ermöglicht

Erstellen Sie nun die REST-API, die die vier CRUD-Operationen implementiert.

Erstellen Sie eine Demo-Tabelle

Erstellen Sie eine Benutzertabelle in der Datenbank.

Fügen Sie in der Datei app.py den folgenden Code hinzu.

CREATE_USERS_TABLE = "CREATE TABLE IF NOT EXISTS Benutzer (ID SERIAL PRIMARY KEY, Name TEXT);"

mit Verbindung:
mit Verbindung.cursor() als Mauszeiger:
cursor.execute (CREATE_USERS_TABLE)

  • Dieser Code erstellt eine neue PostgreSQL-Tabelle mit dem Namen Benutzer mit zwei Säulen.
  • Es verwendet die psycopg2-Verbindungsmethode, um die Verbindung mit der Datenbank herzustellen, und erstellt ein neues Cursor-Objekt mit der Verbindung.Cursor Methode, die zur Ausführung verwendet wird SQL-Abfragen.

1. Definieren Sie die POST-Methode

Erstellen Sie die Post-Route, um Daten hinzuzufügen.

INSERT_USER_RETURN_ID = "INSERT INTO user (name) VALUES (%s) RETURNING id;"
@app.route("/api/user", methoden=["POST"])
defcreate_user():
data = request.get_json()
name = daten["Name"]
mit Verbindung:
mit Verbindung.cursor() als Mauszeiger:
cursor.execute (INSERT_USER_RETURN_ID, (Name,))
user_id = cursor.fetchone()[0]
zurückkehren {"Ausweis": Benutzer-ID, "Name": Name, "Nachricht": f"Benutzer {Name} erstellt."}, 201
  • Die SQL-Abfragezeichenfolge definiert eine SQL-Anweisung, die mithilfe von ausgeführt wird Cursor.execute Methode zum Einfügen einer neuen Zeile mit dem Namen eines Benutzers in die Benutzer Tabelle in der Datenbank. Es gibt die ID des neu erstellten Benutzers zurück.
  • Der create_user Die Funktion übernimmt einen Namen als Parameter zum Speichern in der Datenbank, während die cursor.fetchone -Methode aufgerufen, um die neu erstellte Benutzer-ID abzurufen. Schließlich wird ein Wörterbuch zurückgegeben, das die ID und den Namen des neu erstellten Benutzers enthält, zusammen mit einer Nachricht, die anzeigt, dass der Benutzer erfolgreich erstellt wurde.

2. Definieren Sie die GET-Methode

Definieren Sie zwei Get-Routen: eine zum Abrufen aller Daten in der Datenbank und eine zweite zum Abrufen bestimmter Daten aus der Datenbank basierend auf der ID.

SELECT_ALL_USERS = "SELECT * VON Benutzern;"

@app.route("/api/user", methoden=["GET"])
defget_all_users():
mit Verbindung:
mit Verbindung.cursor() als Mauszeiger:
cursor.execute (SELECT_ALL_USERS)
Benutzer = cursor.fetchall()
Wenn Benutzer:
Ergebnis = []
für Benutzer In Benutzer:
result.append({"Ausweis": Benutzer[0], "Name": Benutzer[1]})
zurückkehren jsonify (Ergebnis)
anders:
zurückkehren jsonify({"Fehler": f"Benutzer nicht gefunden."}), 404

@app.route("/api/user/", Methoden = ["GET"])
defget_user(Benutzer-ID):
mit Verbindung:
mit Verbindung.cursor() als Mauszeiger:
Cursor.execute("SELECT * FROM Benutzer WHERE ID = %s", (Benutzer-ID,))
user = cursor.fetchone()
Wenn Benutzer:
zurückkehren jsonify({"Ausweis": Benutzer[0], "Name": Benutzer[1]})
anders:
zurückkehren jsonify({"Fehler": f"Benutzer mit ID {Benutzer-ID} nicht gefunden."}), 404

  • Diese erste API-Route verarbeitet HTTP GET-Anforderungen zum Abrufen aller Benutzer aus der Datenbank. Es ruft alle Benutzer aus der Datenbank ab und gibt die Ergebnisse in einem JSON-Format in der Antwort zurück.
  • Diese zweite API-Route verarbeitet HTTP GET-Anforderungen zum Abrufen von Daten für einen bestimmten Benutzer aus der Datenbank. Es nimmt in der Benutzer-ID als Parameter, ruft die Daten des Benutzers aus der Datenbank ab und gibt die Ergebnisse in einem JSON-Format in der Antwort zurück.

3. Definieren Sie die PUT-Methode

Erstellen Sie die Put-Route, um die gespeicherten Daten in der Datenbank zu aktualisieren.

@app.route("/api/user/", Methoden=["PUT"])
defupdate_user(Benutzer-ID):
data = request.get_json()
name = daten["Name"]
mit Verbindung:
mit Verbindung.cursor() als Mauszeiger:
cursor.execute (UPDATE_USER_BY_ID, (Name, Benutzer_ID))
Wenn Cursor.Zeilenzahl == 0:
zurückkehren jsonify({"Fehler": f"Benutzer mit ID {Benutzer-ID} nicht gefunden."}), 404
zurückkehren jsonify({"Ausweis": Benutzer-ID, "Name": Name, "Nachricht": f"Benutzer mit ID {Benutzer-ID} Aktualisiert."})
  • Der update_user Die Funktion verwendet den Benutzer-ID-Parameter als Eingabe und verwendet ihn, um den Namen des angegebenen Benutzers in der Datenbank zu aktualisieren.
  • Wenn der Aktualisierungsvorgang erfolgreich ist, wird ein JSON-Objekt mit der aktualisierten Benutzer-ID, dem Namen und einer Erfolgsmeldung in der Antwort zurückgegeben.

4. Definieren Sie die DELETE-Methode

Implementieren Sie die Löschroute, um die gespeicherten Daten eines bestimmten Benutzers in der Datenbank zu löschen.

@app.route("/api/user/", Methoden=["LÖSCHEN"])
defBenutzer löschen(Benutzer-ID):
mit Verbindung:
mit Verbindung.cursor() als Mauszeiger:
cursor.execute (DELETE_USER_BY_ID, (Benutzer-ID,))
Wenn Cursor.Zeilenzahl == 0:
zurückkehren jsonify({"Fehler": f"Benutzer mit ID {Benutzer-ID} nicht gefunden."}), 404
zurückkehren jsonify({"Nachricht": f"Benutzer mit ID {Benutzer-ID} gelöscht."})
  • Diese API-Route verarbeitet die Löschfunktion eines bestimmten Benutzers aus der Datenbank basierend auf seiner ID. Wenn der Benutzer nicht gefunden wird, wird ein 404-Statuscode mit einer Fehlermeldung zurückgegeben. Wenn der Löschvorgang jedoch erfolgreich ist, wird ein JSON-Objekt mit einer Erfolgsmeldung in der Antwort zurückgegeben.

Schreiben von REST-APIs mit Flask

Dieser Leitfaden zeigt, wie Sie Flask und Postgres verwenden, um nebenbei eine einfache CRUD-REST-API zu erstellen um eine Datenbankverbindung herzustellen und verschiedene SQL-Abfragen auszuführen, um Daten zu lesen und zu schreiben a Datenbank. Sie können jetzt eine einfache REST-API erstellen, die die vier CRUD-Vorgänge verarbeiten kann, die in jeder Webanwendung erforderlich sind.

Unabhängig davon, ob Sie einen einfachen Blog oder eine komplexe Webanwendung erstellen, Flask und Postgres bieten leistungsstarke Funktionen und Funktionen, die zum Erstellen eines robusten Backend-Systems erforderlich sind. Alternativ können Sie andere Technologien wie FastAPI und MongoDB verwenden, um RESTful-APIs zu erstellen.