You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.4 KiB

Middleware

Sie können Middleware zu FastAPI-Anwendungen hinzufügen.

Eine „Middleware“ ist eine Funktion, die mit jedem Request arbeitet, bevor er von einer bestimmten Pfadoperation verarbeitet wird. Und auch mit jeder Response, bevor sie zurückgegeben wird.

  • Sie nimmt jeden Request entgegen, der an Ihre Anwendung gesendet wird.
  • Sie kann dann etwas mit diesem Request tun oder beliebigen Code ausführen.
  • Dann gibt sie den Request zur Verarbeitung durch den Rest der Anwendung weiter (durch eine bestimmte Pfadoperation).
  • Sie nimmt dann die Response entgegen, die von der Anwendung generiert wurde (durch eine bestimmte Pfadoperation).
  • Sie kann etwas mit dieser Response tun oder beliebigen Code ausführen.
  • Dann gibt sie die Response zurück.

/// note | Technische Details

Wenn Sie Abhängigkeiten mit yield haben, wird der Exit-Code nach der Middleware ausgeführt.

Wenn es Hintergrundaufgaben gab (später dokumentiert), werden sie nach allen Middlewares ausgeführt.

///

Erstellung einer Middleware

Um eine Middleware zu erstellen, verwenden Sie den Dekorator @app.middleware("http") über einer Funktion.

Die Middleware-Funktion erhält:

  • Den request.
  • Eine Funktion call_next, die den request als Parameter erhält.
    • Diese Funktion gibt den request an die entsprechende Pfadoperation weiter.
    • Dann gibt es die von der entsprechenden Pfadoperation generierte response zurück.
  • Sie können die response dann weiter modifizieren, bevor Sie sie zurückgeben.

{* ../../docs_src/middleware/tutorial001.py hl[8:9,11,14] *}

/// tip | Tipp

Beachten Sie, dass benutzerdefinierte proprietäre Header hinzugefügt werden können. Verwenden Sie dafür das Präfix 'X-'.

Wenn Sie jedoch benutzerdefinierte Header haben, die ein Client in einem Browser sehen soll, müssen Sie sie zu Ihrer CORS-Konfigurationen (CORS (Cross-Origin Resource Sharing){.internal-link target=_blank}) hinzufügen, indem Sie den Parameter expose_headers verwenden, der in der Starlette-CORS-Dokumentation dokumentiert ist.

///

/// note | Technische Details

Sie könnten auch from starlette.requests import Request verwenden.

FastAPI bietet es als Komfort für Sie, den Entwickler, an. Aber es stammt direkt von Starlette.

///

Vor und nach der response

Sie können Code hinzufügen, der mit dem request ausgeführt wird, bevor dieser von einer beliebigen Pfadoperation empfangen wird.

Und auch nachdem die response generiert wurde, bevor sie zurückgegeben wird.

Sie könnten beispielsweise einen benutzerdefinierten Header X-Process-Time hinzufügen, der die Zeit in Sekunden enthält, die benötigt wurde, um den Request zu verarbeiten und eine Response zu generieren:

{* ../../docs_src/middleware/tutorial001.py hl[10,12:13] *}

Andere Middlewares

Sie können später mehr über andere Middlewares in Handbuch für fortgeschrittene Benutzer: Fortgeschrittene Middleware{.internal-link target=_blank} lesen.

In der nächsten Sektion erfahren Sie, wie Sie CORS mit einer Middleware behandeln können.