Der Aufbau von RESTful APIs ist eine grundlegende Fähigkeit für die moderne Webentwicklung, die eine nahtlose Kommunikation zwischen Clients und Servern ermöglicht. Flask-RESTX, eine Erweiterung des beliebten Flask-Frameworks, vereinfacht diesen Prozess, indem es Tools zur effizienten Erstellung robuster APIs bereitstellt. In diesem Tutorial erfahren Sie, wie Sie eine RESTful API mit Flask-RESTX erstellen und wie Sie sie mit Apidog testen können, einer integrierten Plattform für API-Design, Debugging, Dokumentation, Mocking und Testing.
1. Einführung in RESTful APIs
REST (Representational State Transfer) ist ein Architekturstil, der Standard-HTTP-Methoden zur Interaktion mit Ressourcen verwendet. APIs, die sich an die REST-Prinzipien halten, werden als RESTful APIs bezeichnet. Sie bieten eine vorhersehbare und einheitliche Schnittstelle für Client-Server-Interaktionen und machen Webdienste zugänglicher und wartbarer.
2. Einrichten Ihrer Entwicklungsumgebung
Bevor wir mit dem Erstellen unserer API beginnen, richten wir unsere Entwicklungsumgebung ein.
Voraussetzungen
Python 3.7 oder höher: Stellen Sie sicher, dass Python auf Ihrem System installiert ist. Überprüfen Sie dies, indem Sie Folgendes ausführen:
python --version
Virtual Environment: Es ist eine gute Praxis, eine virtuelle Umgebung für Ihr Projekt zu erstellen, um Abhängigkeiten zu verwalten.
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
Installieren von Flask und Flask-RESTX
Installieren Sie mit aktivierter virtueller Umgebung Flask und Flask-RESTX mit pip:
pip install flask flask-restx
Dieser Befehl installiert sowohl Flask als auch Flask-RESTX, sodass wir unsere API-Endpunkte effektiv erstellen und verwalten können.
3. Installieren und Konfigurieren von Flask-RESTX
Flask-RESTX ist eine Erweiterung, die Unterstützung für das schnelle Erstellen von REST-APIs mit Flask hinzufügt. Es fördert Best Practices mit minimalem Setup.

Installation
Wenn Sie Flask-RESTX noch nicht installiert haben, können Sie dies mit pip tun:
pip install flask-restx
Konfiguration
Erstellen Sie eine neue Python-Datei, z. B. app.py
, und richten Sie die grundlegende Konfiguration ein:
from flask import Flask
from flask_restx import Api
app = Flask(__name__)
api = Api(app, version='1.0', title='Sample API',
description='A sample API using Flask-RESTX')
if __name__ == '__main__':
app.run(debug=True)
Dieses Skript initialisiert eine Flask-Anwendung und umschließt sie mit einer Flask-RESTX-API-Instanz, die eine Grundlage für das Erstellen von Endpunkten bietet.
4. Erstellen Ihres ersten API-Endpunkts
Erstellen wir einen einfachen Endpunkt, um zu verstehen, wie Flask-RESTX funktioniert.
Definieren eines Namespace
Namespaces in Flask-RESTX helfen, Ihre API zu organisieren und Namenskonflikte von Endpunkten zu vermeiden.
from flask_restx import Namespace, Resource
ns = Namespace('hello', description='Hello World operations')
Erstellen einer Ressource
Ressourcen in Flask-RESTX entsprechen Endpunkten und definieren, wie HTTP-Methoden behandelt werden.
@ns.route('/')
class HelloWorld(Resource):
def get(self):
return {'message': 'Hello, World!'}
Registrieren des Namespace
Registrieren Sie abschließend den Namespace mit der API:
api.add_namespace(ns)
Wenn Sie nun Ihre Anwendung ausführen und zu http://localhost:5000/hello/
navigieren, sollten Sie Folgendes sehen:
{
"message": "Hello, World!"
}
5. Strukturieren Ihrer Flask-RESTX-Anwendung
Wenn Ihre Anwendung wächst, ist es wichtig, eine saubere und organisierte Struktur beizubehalten.
Empfohlenes Projektlayout
project/
├── app/
│ ├── __init__.py
│ ├── controllers/
│ │ ├── __init__.py
│ │ └── hello_controller.py
│ ├── models/
│ │ ├── __init__.py
│ │ └── hello_model.py
│ └── services/
│ ├── __init__.py
│ └── hello_service.py
├── run.py
└── requirements.txt
Initialisieren der Anwendung
In app/__init__.py
:
from flask import Flask
from flask_restx import Api
def create_app():
app = Flask(__name__)
api = Api(app, version='1.0', title='Sample API',
description='A sample API using Flask-RESTX')
from .controllers.hello_controller import ns as hello_namespace
api.add_namespace(hello_namespace)
return app
In run.py
:
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
Dieser modulare Ansatz trennt die Verantwortlichkeiten und macht die Anwendung wartbarer und skalierbarer.
6. Implementieren von CRUD-Operationen
CRUD-Operationen – Create, Read, Update, Delete – sind grundlegend für die API-Entwicklung. Implementieren wir diese für eine einfache Item
-Ressource.
Definieren des Modells
In app/models/item_model.py
:
from flask_restx import fields
def get_item_model(api):
return api.model('Item', {
'id': fields.Integer(readOnly=True, description='The unique identifier of an item'),
'name': fields.String(required=True, description='Item name'),
'price': fields.Float(required=True, description='Item price')
})
Implementieren der Ressource
In app/controllers/item_controller.py
:
from flask_restx import Namespace, Resource, reqparse
from app.models.item_model import get_item_model
ns = Namespace('items', description='Item operations')
item_model = get_item_model(ns)
items = []
item_id_counter = 1
parser = reqparse.RequestParser()
parser.add_argument('name', type=str, required=True, help='Name of the item')
parser.add_argument('price', type=float, required=True, help='Price of the item')
@ns.route('/')
class ItemList(Resource):
@ns.marshal_list_with(item_model)
def get(self):
return items
@ns.expect(item_model)
@ns.marshal_with(item_model, code=201)
def post(self):
global item_id_counter
args = parser.parse_args()
item = {
'id': item_id_counter,
'name': args['name'],
'price': args['price']
}
items.append(item)
item_id_counter += 1
return item, 201
@ns.route('/<int:id>')
@ns.response(404, 'Item not found')
@ns.param('id', 'The item identifier')
class Item(Resource):
@ns.marshal_with(item_model)
def get(self, id):
item = next((item for item in items if item['id'] == id), None)
if item is not None:
return item
ns.abort(404, message="Item not found")
@ns.expect(item_model)
@ns.marshal_with(item_model)
def put(self, id):
item = next((item for item in items if item['id'] == id), None)
if item is not None:
args = parser.parse_args()
item.update({
'name': args['name'],
'price': args['price']
})
return item
ns.abort(404, message="Item not found")
@ns.response(204, 'Item deleted')
def delete(self, id):
global items
item = next((item for item in items if item['id'] == id), None)
if item is not None:
items = [item for item in items if item['id'] != id]
return '', 204
ns.abort(404, message="Item not found")
In dieser Implementierung:
- GET /items/: Ruft die Liste der Elemente ab.
- POST /items/: Fügt ein neues Element hinzu.
- GET /items/{id}: Ruft ein bestimmtes Element anhand der ID ab.
- PUT /items/{id}: Aktualisiert ein vorhandenes Element anhand der ID.
- DELETE /items/{id}: Löscht ein Element anhand der ID.
Dieses Setup bietet eine vollständige CRUD-Schnittstelle für die Verwaltung von Elementen in Ihrer API.
7. Validieren und Serialisieren von Daten mit Flask-RESTX
Datenvalidierung und -serialisierung sind entscheidend, um die Integrität und Konsistenz der Daten sicherzustellen, die Ihre API verarbeitet. Flask-RESTX bietet Dekoratoren und Felder, um dies zu erleichtern.
Verwenden von Modellen für die Validierung
Definieren Sie ein Modell, um die erwarteten Eingabe- und Ausgabeformate anzugeben.
from flask_restx import fields
item_model = api.model('Item', {
'id': fields.Integer(readOnly=True, description='The unique identifier of an item'),
'name': fields.String(required=True, description='Item name'),
'price': fields.Float(required=True, description='Item price')
})
Durch die Dekoration Ihrer Ressourcenmethoden mit @ns.expect(item_model)
validiert Flask-RESTX automatisch eingehende JSON-Daten anhand dieses Modells.
Serialisieren von Antworten
Verwenden Sie den Dekorator @ns.marshal_with
, um die Ausgabe gemäß dem Modell zu formatieren.
@ns.marshal_with(item_model)
def get(self, id):
# Retrieve and return the item
Dies stellt sicher, dass die Antwortdaten der angegebenen Struktur entsprechen und die Konsistenz in Ihrer API fördern.
8. Testen von RESTful APIs mit Apidog
Testing ist ein wichtiger Bestandteil der API-Entwicklung, um sicherzustellen, dass Ihre Endpunkte wie vorgesehen funktionieren. Apidog ist ein umfassendes Tool, das API-Testing, -Design und -Dokumentation optimiert.
Einrichten von Apidog
Herunterladen und Installieren: Laden Sie Apidog kostenlos herunter und befolgen Sie die Installationsanweisungen für Ihr Betriebssystem.
Erstellen Sie ein neues Projekt: Starten Sie Apidog und erstellen Sie ein neues Projekt für Ihre API.

Importieren Ihrer API-Spezifikation
Wenn Sie Ihre API mit OpenAPI/Swagger dokumentiert haben, können Sie die Spezifikation in Apidog importieren:
Spezifikation importieren: Wählen Sie in Ihrem Apidog-Projekt die Option zum Importieren einer API-Spezifikation und laden Sie Ihre OpenAPI-Datei hoch.


Endpunkte erkunden: Apidog analysiert die Datei und zeigt Ihre API-Endpunkte, Parameter und Modelle an.
Sie können auch APIs von Grund auf neu entwerfen in Apidog.
Testen von Endpunkten
Wählen Sie einen Endpunkt aus: Wählen Sie den Endpunkt aus der Liste aus, den Sie testen möchten.
Konfigurieren Sie die Anfrage:
- Methode: Stellen Sie sicher, dass die richtige HTTP-Methode (GET, POST, PUT, DELETE) ausgewählt ist.
- Parameter: Geben Sie alle erforderlichen Abfrageparameter oder Pfadvariablen ein.
- Header: Legen Sie die erforderlichen Header fest, z. B.
Content-Type: application/json
. - Body: Geben Sie für POST- und PUT-Anfragen die JSON-Nutzlast an.

Senden Sie die Anfrage: Klicken Sie auf die Schaltfläche Senden
, um die Anfrage auszuführen.
Überprüfen Sie die Antwort:
(Profi-Tipp: Apidog validiert die API-Antwort automatisch.)
- Statuscode: Überprüfen Sie, ob der Antwortstatuscode den Erwartungen entspricht (z. B. 200 für Erfolg, 201 für Erstellung).
- Antworttext: Überprüfen Sie, ob die zurückgegebenen Daten korrekt und richtig formatiert sind.
- Header: Untersuchen Sie die Antwortheader auf zusätzliche Informationen.

9. Generieren der API-Dokumentation mit Flask-RESTX
Eine umfassende Dokumentation ist für jede API unerlässlich und erleichtert Entwicklern die Nutzung und Integration. Flask-RESTX bietet integrierte Unterstützung für die Generierung interaktiver API-Dokumentation.
Das Generieren einer umfassenden und benutzerfreundlichen API-Dokumentation ist für Entwickler und Benutzer, die mit Ihrer API interagieren, von entscheidender Bedeutung. Flask-RESTX vereinfacht diesen Prozess, indem es automatisch die Swagger-UI-Dokumentation generiert und eine interaktive Oberfläche zum Erkunden und Testen Ihrer API-Endpunkte bereitstellt.
Automatische Swagger-Dokumentation
Standardmäßig generiert Flask-RESTX die Swagger-Dokumentation, auf die über die Stamm-URL Ihrer API zugegriffen werden kann. Diese Funktion bietet einen sofortigen Überblick über die Struktur und die verfügbaren Endpunkte Ihrer API ohne zusätzliche Konfiguration.
Anpassen der Dokumentation mit Dekoratoren
Flask-RESTX bietet mehrere Dekoratoren, um Ihre API-Dokumentation zu erweitern und anzupassen:
@api.doc()
: Fügt Ihren Ressourcen oder Methoden zusätzliche Informationen hinzu. Zum Beispiel, um Parameter zu dokumentieren:
@api.route('/my-resource/<id>')
@api.doc(params={'id': 'An ID'})
class MyResource(Resource):
def get(self, id):
return {}
@api.response()
: Dokumentiert die erwarteten Antworten, einschließlich Statuscodes und Beschreibungen:
@api.route('/my-resource/<id>')
class MyResource(Resource):
@api.response(403, 'Not Authorized')
def post(self, id):
api.abort(403)
@api.marshal_with()
: Gibt das Ausgabemodell für eine Antwort an und stellt so eine konsistente Datenformatierung sicher:
@api.route('/item/<int:id>')
class ItemResource(Resource):
@api.marshal_with(item_model)
def get(self, id):
# Retrieve and return the item
@api.expect()
: Definiert das erwartete Eingabemodell für Anfragen und erleichtert so die Validierung und Dokumentation:
@api.route('/item')
class ItemResource(Resource):
@api.expect(item_model)
def post(self):
# Handle the post request
Organisieren mit Namespaces
Namespaces in Flask-RESTX helfen, verwandte Ressourcen zu gruppieren und die Organisation Ihrer API und ihrer Dokumentation zu verbessern.
from flask_restx import Namespace, Resource
ns = Namespace('items', description='Item operations')
@ns.route('/<int:id>')
class ItemResource(Resource):
def get(self, id):
# Retrieve and return the item
Durch die Registrierung des Namespace mit der API werden alle zugehörigen Routen und Dokumentationen entsprechend gruppiert:
api.add_namespace(ns)
Zugriff auf die Swagger-UI
Sobald Ihre Flask-RESTX-Anwendung ausgeführt wird, können Sie auf die automatisch generierte Swagger-UI zugreifen, indem Sie zur Stamm-URL Ihrer API navigieren (z. B. http://localhost:5000/
). Diese Oberfläche bietet eine interaktive Erkundung Ihrer API und zeigt verfügbare Endpunkte, erwartete Eingaben und potenzielle Antworten an.
Durch die Nutzung dieser Funktionen stellen Sie sicher, dass Ihre API gut dokumentiert, benutzerfreundlich und für Entwickler und Verbraucher gleichermaßen leicht verständlich ist.
10. Verbessern der API-Dokumentation mit Apidog
Während Flask-RESTX eine grundlegende Dokumentation bereitstellt, bietet Apidog erweiterte Funktionen für die API-Dokumentation, einschließlich Anpassung, automatischer Codegenerierung und Echtzeit-Testing.

Verwenden Sie den visuellen Editor von Apidog, um Ihre API-Endpunkte, Anforderungsparameter und Antwortschemata zu definieren. Generieren Sie mit einem einzigen Klick eine umfassende und interaktive API-Dokumentation.

Teilen Sie Ihre Dokumentation mit Teammitgliedern oder externen Partnern, damit diese API-Endpunkte direkt in der Dokumentation testen können.
Durch die Integration von Flask-RESTX mit Apidog können Sie robuste APIs mit professioneller Dokumentation erstellen und so sowohl die Entwicklungseffizienz als auch die Benutzererfahrung verbessern.
Fazit
In diesem umfassenden Leitfaden haben wir den Prozess der Erstellung von RESTful APIs mit Flask-RESTX untersucht, einer leistungsstarken Erweiterung für Flask, die die API-Entwicklung optimiert. Wir haben wichtige Themen behandelt, wie z. B. das Einrichten Ihrer Entwicklungsumgebung, das Erstellen und Verwalten von API-Endpunkten, das Validieren und Serialisieren von Daten sowie das Generieren interaktiver API-Dokumentation.
Darüber hinaus haben wir Apidog vorgestellt, ein vielseitiges Tool, das Ihren API-Entwicklungsworkflow durch Funktionen wie automatisiertes Testing, Leistungstests und kollaborative Dokumentation verbessert. Durch die Integration von Apidog in Ihren Entwicklungsprozess können Sie sicherstellen, dass Ihre APIs robust, effizient und gut dokumentiert sind.