So erstellen Sie eine einfache REST-API mit Flask
In diesem Tutorial erstellen Sie eine einfache REST-API mit Flask, einem leichtgewichtigen Python-Webframework. Sie richten eine Flask-Anwendung ein, definieren Routen, verarbeiten Anfragen und geben JSON-Antworten zurück. Am Ende des Tutorials besitzen Sie eine funktionierende API, die Sie erweitern und in andere Anwendungen integrieren.
Voraussetzungen
- Ein Server mit Ubuntu sowie ein Nicht-Root-Benutzer mit sudo-Rechten und einer aktiven Firewall. Bitte stellen Sie sicher, dass Sie eine unterstützte Version von Ubuntu verwenden.
- Grundkenntnisse in der Nutzung der Linux-Befehlszeile.
- Grundlegendes Verständnis der Python-Programmierung.
- Python 3.7 oder höher auf Ihrem Ubuntu-System installiert.
Schritt 1 – Einrichten der Flask-Umgebung
Ubuntu 24.04 enthält standardmäßig Python 3. Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus, um die Python-3-Installation zu überprüfen:
root@ubuntu:~# python3 --version
Python 3.12.3
Falls Python 3 bereits installiert ist, gibt der obige Befehl die aktuelle Version aus. Falls nicht, können Sie Python 3 mit folgendem Befehl installieren:
root@ubuntu:~# sudo apt install python3
Als nächstes müssen Sie den Paketmanager pip
auf Ihrem System installieren:
root@ubuntu:~# sudo apt install python3-pip
Nach der Installation von pip installieren wir Flask.
Es wird empfohlen, Flask in einer virtuellen Umgebung zu installieren, um Konflikte mit anderen Paketen auf Ihrem System zu vermeiden:
root@ubuntu:~# python3 -m venv myprojectenv
root@ubuntu:~# source myprojectenv/bin/activate
root@ubuntu:~# pip install Flask
Schritt 2 – Erstellen einer Flask-Anwendung
Im nächsten Schritt schreiben wir den Python-Code für die Flask-Anwendung. Navigieren Sie dazu in das gewünschte Verzeichnis:
root@ubuntu:~# cd ~/pfad-zum-skript-verzeichnis
Erstellen Sie anschließend eine neue Python-Datei app.py
und importieren Sie Flask. Initialisieren Sie die Flask-Anwendung und definieren Sie eine grundlegende Route:
root@ubuntu:~# nano app.py
Dies öffnet einen leeren Texteditor. Schreiben Sie Ihre Logik oder kopieren Sie den folgenden Code:
app.py
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify(message="Hello, World!")
# In-Memory-Datenspeicher
items = [{"id": 1, "name": "Dies ist Element 1"}, {"id": 2, "name": "Dies ist Element 2"}]
Schritt 3 – Erstellen von RESTful-Routen
In diesem Abschnitt definieren wir die Routen in unserer Flask-Anwendung, die verschiedenen Aktionen einer API zugeordnet sind. Jede Route verarbeitet eine spezifische HTTP-Methode.
GET, POST, PUT und DELETE entsprechen den vier grundlegenden CRUD-Operationen (Create, Read, Update, Delete).
Fügen Sie die folgenden Routen zu Ihrer app.py
-Datei hinzu:
app.py
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify(message="Hello, World!")
# In-Memory-Datenspeicher
items = [{"id": 1, "name": "Dies ist Element 1"}, {"id": 2, "name": "Dies ist Element 2"}]
# GET-Anfrage: Alle Elemente abrufen
@app.route('/api/items', methods=['GET'])
def get_items():
return jsonify(items)
# GET-Anfrage: Ein bestimmtes Element per ID abrufen
@app.route('/api/items/', methods=['GET'])
def get_item(item_id):
item = next((item for item in items if item["id"] == item_id), None)
if item is None:
return jsonify({"error": "Element nicht gefunden"}), 404
return jsonify(item)
# POST-Anfrage: Neues Element erstellen
@app.route('/api/items', methods=['POST'])
def create_item():
new_item = {"id": len(items) + 1, "name": request.json.get('name')}
items.append(new_item)
return jsonify(new_item), 201
# PUT-Anfrage: Bestehendes Element aktualisieren
@app.route('/api/items/', methods=['PUT'])
def update_item(item_id):
item = next((item for item in items if item["id"] == item_id), None)
if item is None:
return jsonify({"error": "Element nicht gefunden"}), 404
item['name'] = request.json.get('name', item['name'])
return jsonify(item)
# DELETE-Anfrage: Element löschen
@app.route('/api/items/', methods=['DELETE'])
def delete_item(item_id):
global items
items = [item for item in items if item["id"] != item_id]
return '', 204
if __name__ == "__main__":
app.run(debug=True)
Erfahren Sie mehr über die Funktionen:
Flask-Importe
Der Code importiert die notwendigen Komponenten aus Flask: Flask
, jsonify
und request
.
In-Memory-Datenspeicher
items
ist eine einfache Liste von Dictionaries, die als temporärer Datenspeicher für die API dient. Jedes Element hat eine id
und einen name
.
GET /api/items
Wenn eine GET-Anfrage an /api/items
gesendet wird, gibt der Server eine Liste aller Elemente im items
-Datenspeicher zurück. Dies ist nützlich, um alle Ressourcen in einer Sammlung abzurufen.
POST /api/items
Eine POST-Anfrage an /api/items
ermöglicht es dem Client, ein neues Element zu erstellen. Der Server erwartet ein JSON-Objekt mit den Details des neuen Elements im Anfragetext. Nach der Erstellung gibt der Server das neu erstellte Element mit dem Statuscode 201 Created
zurück.
PUT /api/items/<int:item_id>
Eine PUT-Anfrage an /api/items/<item_id>
wird verwendet, um ein vorhandenes Element mit der angegebenen item_id
zu aktualisieren. Der Client sendet die aktualisierten Daten im Anfragetext, und der Server modifiziert das vorhandene Element. Falls das Element nicht gefunden wird, gibt der Server einen 404 Not Found
-Fehler zurück.
DELETE /api/items/<int:item_id>
Eine DELETE-Anfrage an /api/items/<item_id>
entfernt das Element mit der angegebenen item_id
aus dem Datenspeicher. Wenn das Element erfolgreich gelöscht wurde, gibt der Server einen 204 No Content
-Statuscode zurück, was bedeutet, dass die Löschung erfolgreich war und keine weiteren Inhalte zurückgegeben werden.
Anwendung ausführen
Der Block if __name__ == "__main__":
stellt sicher, dass die Flask-Anwendung ausgeführt wird, wenn das Skript direkt gestartet wird.
Schritt 4 – Ausführen und Testen Ihrer API
Starten Sie Ihren Flask-Server mit folgendem Befehl:
root@ubuntu:~# python3 app.py
Sie sollten folgende Ausgabe sehen:
Output
* Serving Flask app 'app'
* Debug mode: on
WARNING: Dies ist ein Entwicklungsserver. Verwenden Sie ihn nicht für eine Produktionsumgebung. Nutzen Sie stattdessen einen produktiven WSGI-Server.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger ist aktiv!
* Debugger PIN: 837-877-972
Jetzt können Sie die Endpunkte mit curl
, Postman oder einem anderen HTTP-Client testen. In diesem Tutorial wird curl
verwendet.
Testen der API-Endpunkte mit curl
- GET:
curl http://127.0.0.1:5000/api/items
- POST:
curl -X POST -H "Content-Type: application/json" -d '{"name": "Dies ist Element 3"}' http://127.0.0.1:5000/api/items
- PUT:
curl -X PUT -H "Content-Type: application/json" -d '{"name": "Dies ist aktualisiertes Element 1"}' http://127.0.0.1:5000/api/items/1
- DELETE:
curl -X DELETE http://127.0.0.1:5000/api/items/1
Sehen wir uns diese Befehle in Aktion an:
Führen Sie den folgenden Befehl aus, um alle Elemente abzurufen:
root@ubuntu:~# curl http://127.0.0.1:5000/api/items
Ausgabe
[
{
"id": 1,
"name": "Dies ist Element 1"
},
{
"id": 2,
"name": "Dies ist Element 2"
}
]
Sie werden feststellen, dass der Server eine Liste aller Elemente im Datenspeicher zurückgibt.
POST-Anfrage: Ein neues Element hinzufügen
Mit der POST-Methode fügen wir ein neues Element zum Datenspeicher hinzu:
root@ubuntu:~# curl -X POST -H "Content-Type: application/json" -d '{"name": "Dies ist Element 3"}' http://127.0.0.1:5000/api/items
Ausgabe
{
"id": 3,
"name": "Dies ist Element 3"
}
Hinweis: In Ihrer Konsole, in der der Flask-Server läuft, können Sie sehen, dass alle HTTP-Anfragen ausgeführt werden, einschließlich ihrer Statuscodes.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger ist aktiv!
* Debugger PIN: 837-877-972
127.0.0.1 - - [23/Aug/2024 06:57:27] "GET /api/items HTTP/1.1" 200 -
127.0.0.1 - - [23/Aug/2024 06:59:56] "POST /api/items HTTP/1.1" 201 -
Dies ist eine großartige Möglichkeit, um den Server zu überwachen, zu debuggen und eventuelle Probleme zu beheben.
PUT-Anfrage: Ein bestehendes Element aktualisieren
Eine PUT-Anfrage an /api/items/<item_id>
aktualisiert ein bestehendes Element mit der angegebenen item_id
.
root@ubuntu:~# curl -X PUT -H "Content-Type: application/json" -d '{"name": "Dies ist aktualisiertes Element 1"}' http://127.0.0.1:5000/api/items/1
Ausgabe
{
"id": 1,
"name": "Dies ist aktualisiertes Element 1"
}
GET-Anfrage: Das aktualisierte Element abrufen
Nun führen wir eine GET-Anfrage aus, um das aktualisierte Element 1 abzurufen:
root@ubuntu:~# curl http://127.0.0.1:5000/api/items/1
Ausgabe
{
"id": 1,
"name": "Dies ist aktualisiertes Element 1"
}
DELETE-Anfrage: Ein Element löschen
Schließlich führen wir eine DELETE-Anfrage aus, um ein Element aus dem Datenspeicher zu entfernen:
root@ubuntu:~# curl -X DELETE http://127.0.0.1:5000/api/items/1
Dadurch löscht sich Element 1 aus dem Datenspeicher.
GET-Anfrage zur Überprüfung der Löschung
Führen Sie eine GET-Anfrage aus, um zu überprüfen, ob Sie das Element gelöscht haben:
root@ubuntu:~# curl http://127.0.0.1:5000/api/items
Ausgabe
[
{
"id": 2,
"name": "Dies ist Element 2"
},
{
"id": 3,
"name": "Dies ist Element 3"
}
]
Sie sehen, dass Element 1 nicht mehr vorhanden ist, da Sie es dauerhaft gelöscht haben.
Fazit
In diesem Tutorial haben Sie eine REST-API-Anwendung mit Flask erstellt. Jetzt erweitern Sie die API um zusätzliche Routen, integrieren sie in eine Datenbank oder stellen sie in einer Cloud-Plattform bereit. Flask ermöglicht es Ihnen, APIs schnell und effizient zu entwickeln. Mit diesem Wissen erstellen Sie nun komplexere Anwendungen.