So erstellen und dokumentieren Sie RESTful APIs mit Flask-RESTX und Apidog

Lerne RESTful APIs mit Flask-RESTX. Daten validieren, serialisieren & interaktive Doku erstellen. Apidog: Testen & Doku. Kostenloser Download!

Leo Schulz

Leo Schulz

5 June 2025

So erstellen und dokumentieren Sie RESTful APIs mit Flask-RESTX und Apidog

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.

💡
Erwägen Sie, Ihren API-Entwicklungsworkflow mit Apidog zu verbessern. Es ist ein umfassendes Tool, das API-Design, Debugging, Testing und Dokumentation optimiert. Laden Sie Apidog kostenlos herunter und verfolgen Sie den Verlauf, um zu sehen, wie es sich nahtlos in den Prozess integriert.
button

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:

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.

button

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:

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.)

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.

button

Explore more

So verwenden Sie Deepseek R1 lokal mit Cursor

So verwenden Sie Deepseek R1 lokal mit Cursor

Erfahre, wie du DeepSeek R1 lokal mit Cursor IDE einrichtest & konfigurierst – privates, kostengünstiges KI-Coding.

4 June 2025

Wie man Gemma 3n auf Android ausführt?

Wie man Gemma 3n auf Android ausführt?

Erfahre, wie du Gemma 3n auf Android installierst und ausführst, mit Google AI Edge Gallery.

3 June 2025

So verwenden Sie den Google Search Console MCP-Server

So verwenden Sie den Google Search Console MCP-Server

Google Search Console & Apidog: SEO-Analyse & KI-API-Entwicklung. Installation, Konfiguration & Nutzung für Web-Performance & API-Einblicke.

30 May 2025

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen