@ -8,7 +8,7 @@ Wenn Sie mit **FastAPI** beginnen, benötigen Sie dies möglicherweise nicht.
///
///
Sie können zusätzliche Responses mit zusätzlichen Statuscodes, Medientypen, Beschreibungen, usw. deklarieren.
Sie können zusätzliche <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> mit zusätzlichen Statuscodes, Medientypen, Beschreibungen, usw. deklarieren.
Diese zusätzlichen Responses werden in das OpenAPI-Schema aufgenommen, sodass sie auch in der API-Dokumentation erscheinen.
Diese zusätzlichen Responses werden in das OpenAPI-Schema aufgenommen, sodass sie auch in der API-Dokumentation erscheinen.
Standardmäßig liefert **FastAPI** die Responses als `JSONResponse` zurück und fügt den Inhalt, den Sie aus Ihrer *Pfadoperation* zurückgeben, in diese `JSONResponse` ein.
Standardmäßig liefert **FastAPI** die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> als `JSONResponse` zurück und fügt den Inhalt, den Sie aus Ihrer *Pfadoperation* zurückgeben, in diese `JSONResponse` ein.
Es wird der Default-Statuscode oder derjenige verwendet, den Sie in Ihrer *Pfadoperation* festgelegt haben.
Es wird der Default-Statuscode oder derjenige verwendet, den Sie in Ihrer *Pfadoperation* festgelegt haben.
@ -110,7 +110,7 @@ $ fastapi run main.py --root-path /api/v1
</div>
</div>
wäre die Response etwa:
wäre die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> etwa:
```JSON
```JSON
{
{
@ -131,7 +131,7 @@ Die Übergabe des `root_path` an `FastAPI` wäre das Äquivalent zur Übergabe d
Beachten Sie, dass der Server (Uvicorn) diesen `root_path` für nichts anderes verwendet als für die Weitergabe an die Anwendung.
Beachten Sie, dass der Server (Uvicorn) diesen `root_path` für nichts anderes verwendet als für die Weitergabe an die Anwendung.
Aber wenn Sie mit Ihrem Browser auf <ahref="http://127.0.0.1:8000"class="external-link"target="_blank">http://127.0.0.1:8000/app</a> gehen, sehen Sie die normale Antwort:
Aber wenn Sie mit Ihrem Browser auf <ahref="http://127.0.0.1:8000"class="external-link"target="_blank">http://127.0.0.1:8000/app</a> gehen, sehen Sie die normale Response:
Standardmäßig gibt **FastAPI** die Responses mittels `JSONResponse` zurück.
Standardmäßig gibt **FastAPI** die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> mittels `JSONResponse` zurück.
Sie können dies überschreiben, indem Sie direkt eine `Response` zurückgeben, wie in [Eine Response direkt zurückgeben](response-directly.md){.internal-link target=_blank} gezeigt.
Sie können dies überschreiben, indem Sie direkt eine `Response` zurückgeben, wie in [Eine Response direkt zurückgeben](response-directly.md){.internal-link target=_blank} gezeigt.
# Verwendung von Datenklassen { #using-dataclasses }
# Verwendung von Datenklassen { #using-dataclasses }
FastAPI basiert auf **Pydantic**, und ich habe Ihnen gezeigt, wie Sie Pydantic-Modelle verwenden können, um <abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Requests</abbr> und Responses zu deklarieren.
FastAPI basiert auf **Pydantic**, und ich habe Ihnen gezeigt, wie Sie Pydantic-Modelle verwenden können, um <abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Requests</abbr> und <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> zu deklarieren.
Aber FastAPI unterstützt auf die gleiche Weise auch die Verwendung von <ahref="https://docs.python.org/3/library/dataclasses.html"class="external-link"target="_blank">`dataclasses`</a>:
Aber FastAPI unterstützt auf die gleiche Weise auch die Verwendung von <ahref="https://docs.python.org/3/library/dataclasses.html"class="external-link"target="_blank">`dataclasses`</a>:
Beachten Sie, dass die *Pfadoperationen* die Modelle definieren, die sie für die <abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Request</abbr>- und Response-<abbrtitle="Die eigentlichen Nutzdaten, abzüglich der Metadaten">Payload</abbr> verwenden, indem sie die Modelle `Item` und `ResponseMessage` verwenden.
Beachten Sie, dass die *Pfadoperationen* die Modelle definieren, die sie für die <abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Request</abbr>- und <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>-<abbrtitle="Die eigentlichen Nutzdaten, abzüglich der Metadaten">Payload</abbr> verwenden, indem sie die Modelle `Item` und `ResponseMessage` verwenden.
@ -69,7 +69,7 @@ Die folgenden Argumente werden unterstützt:
* `allowed_hosts` – Eine Liste von Domain-Namen, die als Hostnamen zulässig sein sollten. Wildcard-Domains wie `*.example.com` werden unterstützt, um Subdomains zu matchen. Um jeden Hostnamen zu erlauben, verwenden Sie entweder `allowed_hosts=["*"]` oder lassen Sie diese Middleware weg.
* `allowed_hosts` – Eine Liste von Domain-Namen, die als Hostnamen zulässig sein sollten. Wildcard-Domains wie `*.example.com` werden unterstützt, um Subdomains zu matchen. Um jeden Hostnamen zu erlauben, verwenden Sie entweder `allowed_hosts=["*"]` oder lassen Sie diese Middleware weg.
Wenn ein eingehender Request nicht korrekt validiert wird, wird eine `400`-Response gesendet.
Wenn ein eingehender Request nicht korrekt validiert wird, wird eine `400`-<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> gesendet.
## `GZipMiddleware` { #gzipmiddleware }
## `GZipMiddleware` { #gzipmiddleware }
@ -81,7 +81,7 @@ Diese Middleware verarbeitet sowohl Standard- als auch Streaming-Responses.
Die folgenden Argumente werden unterstützt:
Die folgenden Argumente werden unterstützt:
* `minimum_size` – Antworten, die kleiner als diese Mindestgröße in Bytes sind, nicht per GZip komprimieren. Der Defaultwert ist `500`.
* `minimum_size` – Responsen, die kleiner als diese Mindestgröße in Bytes sind, nicht per GZip komprimieren. Der Defaultwert ist `500`.
* `compresslevel` – Wird während der GZip-Kompression verwendet. Es ist ein Ganzzahlwert zwischen 1 und 9. Der Defaultwert ist `9`. Ein niedrigerer Wert resultiert in schnellerer Kompression, aber größeren Dateigrößen, während ein höherer Wert langsamere Kompression, aber kleinere Dateigrößen zur Folge hat.
* `compresslevel` – Wird während der GZip-Kompression verwendet. Es ist ein Ganzzahlwert zwischen 1 und 9. Der Defaultwert ist `9`. Ein niedrigerer Wert resultiert in schnellerer Kompression, aber größeren Dateigrößen, während ein höherer Wert langsamere Kompression, aber kleinere Dateigrößen zur Folge hat.
@ -4,7 +4,7 @@ Sie könnten eine API mit einer *Pfadoperation* erstellen, die einen <abbr title
Der Vorgang, der stattfindet, wenn Ihre API-Anwendung die *externe API* aufruft, wird als „Callback“ („Rückruf“) bezeichnet. Denn die Software, die der externe Entwickler geschrieben hat, sendet einen Request an Ihre API und dann *ruft Ihre API zurück* (*calls back*) und sendet einen Request an eine *externe API* (die wahrscheinlich vom selben Entwickler erstellt wurde).
Der Vorgang, der stattfindet, wenn Ihre API-Anwendung die *externe API* aufruft, wird als „Callback“ („Rückruf“) bezeichnet. Denn die Software, die der externe Entwickler geschrieben hat, sendet einen Request an Ihre API und dann *ruft Ihre API zurück* (*calls back*) und sendet einen Request an eine *externe API* (die wahrscheinlich vom selben Entwickler erstellt wurde).
In diesem Fall möchten Sie möglicherweise dokumentieren, wie diese externe API aussehen *sollte*. Welche *Pfadoperation* sie haben sollte, welchen Body sie erwarten sollte, welche Response sie zurückgeben sollte, usw.
In diesem Fall möchten Sie möglicherweise dokumentieren, wie diese externe API aussehen *sollte*. Welche *Pfadoperation* sie haben sollte, welchen Body sie erwarten sollte, welche <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> sie zurückgeben sollte, usw.
## Eine Anwendung mit Callbacks { #an-app-with-callbacks }
## Eine Anwendung mit Callbacks { #an-app-with-callbacks }
@ -56,7 +56,7 @@ Sie wird nicht in der Dokumentation angezeigt, aber andere Tools (z. B. Sphinx)
Sie haben wahrscheinlich gesehen, wie man das `response_model` und den `status_code` für eine *Pfadoperation* deklariert.
Sie haben wahrscheinlich gesehen, wie man das `response_model` und den `status_code` für eine *Pfadoperation* deklariert.
Das definiert die Metadaten der Haupt-Response einer *Pfadoperation*.
Das definiert die Metadaten der Haupt-<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> einer *Pfadoperation*.
Sie können auch zusätzliche Responses mit deren Modellen, Statuscodes usw. deklarieren.
Sie können auch zusätzliche Responses mit deren Modellen, Statuscodes usw. deklarieren.
@ -18,7 +18,7 @@ In diesen Fällen können Sie einen `Response`-Parameter verwenden.
Sie können einen Parameter vom Typ `Response` in Ihrer *Pfadoperation-Funktion* deklarieren (wie Sie es auch für Cookies und Header tun können).
Sie können einen Parameter vom Typ `Response` in Ihrer *Pfadoperation-Funktion* deklarieren (wie Sie es auch für Cookies und Header tun können).
Anschließend können Sie den `status_code` in diesem *vorübergehenden* Response-Objekt festlegen.
Anschließend können Sie den `status_code` in diesem *vorübergehenden*<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>-Objekt festlegen.
Sie können einen Parameter vom Typ `Response` in Ihrer *Pfadoperation-Funktion* deklarieren.
Sie können einen Parameter vom Typ `Response` in Ihrer *Pfadoperation-Funktion* deklarieren.
Und dann können Sie Cookies in diesem *vorübergehenden* Response-Objekt setzen.
Und dann können Sie Cookies in diesem *vorübergehenden*<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>-Objekt setzen.
@ -4,7 +4,7 @@ Wenn Sie eine **FastAPI** *Pfadoperation* erstellen, können Sie normalerweise b
Standardmäßig konvertiert **FastAPI** diesen Rückgabewert automatisch nach JSON, mithilfe des `jsonable_encoder`, der in [JSON-kompatibler Encoder](../tutorial/encoder.md){.internal-link target=_blank} erläutert wird.
Standardmäßig konvertiert **FastAPI** diesen Rückgabewert automatisch nach JSON, mithilfe des `jsonable_encoder`, der in [JSON-kompatibler Encoder](../tutorial/encoder.md){.internal-link target=_blank} erläutert wird.
Dann würde es hinter den Kulissen diese JSON-kompatiblen Daten (z. B. ein `dict`) in eine `JSONResponse` einfügen, die zum Senden der Response an den Client verwendet wird.
Dann würde es hinter den Kulissen diese JSON-kompatiblen Daten (z. B. ein `dict`) in eine `JSONResponse` einfügen, die zum Senden der <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> an den Client verwendet wird.
Sie können jedoch direkt eine `JSONResponse` von Ihren *Pfadoperationen* zurückgeben.
Sie können jedoch direkt eine `JSONResponse` von Ihren *Pfadoperationen* zurückgeben.
Sie können einen Parameter vom Typ `Response` in Ihrer *Pfadoperation-Funktion* deklarieren (wie Sie es auch für Cookies tun können).
Sie können einen Parameter vom Typ `Response` in Ihrer *Pfadoperation-Funktion* deklarieren (wie Sie es auch für Cookies tun können).
Und dann können Sie Header in diesem *vorübergehenden* Response-Objekt festlegen.
Und dann können Sie Header in diesem *vorübergehenden*<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>-Objekt festlegen.
@ -78,7 +78,7 @@ if "stanleyjobsox" == "stanleyjobson" and "love123" == "swordfish":
...
...
```
```
Python muss das gesamte `stanleyjobso` in `stanleyjobsox` und `stanleyjobson` vergleichen, bevor es erkennt, dass beide Zeichenfolgen nicht gleich sind. Daher wird es einige zusätzliche Mikrosekunden dauern, bis die Response „Incorrect username or password“ erfolgt.
Python muss das gesamte `stanleyjobso` in `stanleyjobsox` und `stanleyjobson` vergleichen, bevor es erkennt, dass beide Zeichenfolgen nicht gleich sind. Daher wird es einige zusätzliche Mikrosekunden dauern, bis die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> „Incorrect username or password“ erfolgt.
#### Die Zeit zum Antworten hilft den Angreifern { #the-time-to-answer-helps-the-attackers }
#### Die Zeit zum Antworten hilft den Angreifern { #the-time-to-answer-helps-the-attackers }
@ -39,7 +39,7 @@ Außerdem wurde in früheren Versionen das `request`-Objekt als Teil der Schlüs
/// tip | Tipp
/// tip | Tipp
Durch die Deklaration von `response_class=HTMLResponse` kann die Dokumentationsoberfläche erkennen, dass die Response HTML sein wird.
Durch die Deklaration von `response_class=HTMLResponse` kann die Dokumentationsoberfläche erkennen, dass die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> HTML sein wird.
@ -20,7 +20,7 @@ Jetzt wird jeder <abbr title="Request – Anfrage: Daten, die der Client zum Ser
Und der Rest wird von **FastAPI** gehandhabt.
Und der Rest wird von **FastAPI** gehandhabt.
Wenn Sie das ausführen und auf <ahref="http://localhost:8000/v1/"class="external-link"target="_blank">http://localhost:8000/v1/</a> gehen, sehen Sie die Response von Flask:
Wenn Sie das ausführen und auf <ahref="http://localhost:8000/v1/"class="external-link"target="_blank">http://localhost:8000/v1/</a> gehen, sehen Sie die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> von Flask:
@ -283,7 +283,7 @@ Aus diesem Grund basiert **FastAPI** auf Starlette, da dieses das schnellste ver
Falcon ist ein weiteres leistungsstarkes Python-Framework. Es ist minimalistisch konzipiert und dient als Grundlage für andere Frameworks wie Hug.
Falcon ist ein weiteres leistungsstarkes Python-Framework. Es ist minimalistisch konzipiert und dient als Grundlage für andere Frameworks wie Hug.
Es ist so konzipiert, dass es über Funktionen verfügt, welche zwei Parameter empfangen, einen „Request“ und eine „Response“. Dann „lesen“ Sie Teile des Requests und „schreiben“ Teile der Response. Aufgrund dieses Designs ist es nicht möglich, Request-Parameter und -Bodys mit Standard-Python-Typhinweisen als Funktionsparameter zu deklarieren.
Es ist so konzipiert, dass es über Funktionen verfügt, welche zwei Parameter empfangen, einen „<abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Request</abbr>“ und eine „<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>“. Dann „lesen“ Sie Teile des Requests und „schreiben“ Teile der Response. Aufgrund dieses Designs ist es nicht möglich, Request-Parameter und -Bodys mit Standard-Python-Typhinweisen als Funktionsparameter zu deklarieren.
Daher müssen Datenvalidierung, Serialisierung und Dokumentation im Code und nicht automatisch erfolgen. Oder sie müssen als Framework oberhalb von Falcon implementiert werden, so wie Hug. Dieselbe Unterscheidung findet auch in anderen Frameworks statt, die vom Design von Falcon inspiriert sind und ein Requestobjekt und ein Responseobjekt als Parameter haben.
Daher müssen Datenvalidierung, Serialisierung und Dokumentation im Code und nicht automatisch erfolgen. Oder sie müssen als Framework oberhalb von Falcon implementiert werden, so wie Hug. Dieselbe Unterscheidung findet auch in anderen Frameworks statt, die vom Design von Falcon inspiriert sind und ein Requestobjekt und ein Responseobjekt als Parameter haben.
@ -241,7 +241,7 @@ Das ist auch bei den meisten Webanwendungen der Fall.
Viele, viele Benutzer, aber Ihr Server wartet 🕙 darauf, dass deren nicht so gute Internetverbindungen die <abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Requests</abbr> übermitteln.
Viele, viele Benutzer, aber Ihr Server wartet 🕙 darauf, dass deren nicht so gute Internetverbindungen die <abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Requests</abbr> übermitteln.
Und dann wieder warten 🕙, bis die Responses zurückkommen.
Und dann wieder warten 🕙, bis die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> zurückkommen.
Dieses „Warten“ 🕙 wird in Mikrosekunden gemessen, aber zusammenfassend lässt sich sagen, dass am Ende eine Menge gewartet wird.
Dieses „Warten“ 🕙 wird in Mikrosekunden gemessen, aber zusammenfassend lässt sich sagen, dass am Ende eine Menge gewartet wird.
@ -214,7 +214,7 @@ Im folgenden Beispiel gibt es einen **Manager-Prozess**, welcher zwei **Workerpr
Dieser Manager-Prozess wäre wahrscheinlich derjenige, welcher der IP am **Port** lauscht. Und er würde die gesamte Kommunikation an die Workerprozesse weiterleiten.
Dieser Manager-Prozess wäre wahrscheinlich derjenige, welcher der IP am **Port** lauscht. Und er würde die gesamte Kommunikation an die Workerprozesse weiterleiten.
Diese Workerprozesse würden Ihre Anwendung ausführen, sie würden die Hauptberechnungen durchführen, um einen **Request** entgegenzunehmen und eine **Response** zurückzugeben, und sie würden alles, was Sie in Variablen einfügen, in den RAM laden.
Diese Workerprozesse würden Ihre Anwendung ausführen, sie würden die Hauptberechnungen durchführen, um einen **<abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Request</abbr>** entgegenzunehmen und eine **<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>** zurückzugeben, und sie würden alles, was Sie in Variablen einfügen, in den RAM laden.
* **CORS**, GZip, statische Dateien, <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> streamen.
@ -14,7 +14,7 @@ Das Verstecken der Dokumentation macht es nur schwieriger zu verstehen, wie mit
Wenn Sie Ihre API sichern möchten, gibt es mehrere bessere Dinge, die Sie tun können, zum Beispiel:
Wenn Sie Ihre API sichern möchten, gibt es mehrere bessere Dinge, die Sie tun können, zum Beispiel:
* Stellen Sie sicher, dass Sie über gut definierte Pydantic-Modelle für Ihre <abbrtitle="Anfragekörper">Requestbodys</abbr> und Responses verfügen.
* Stellen Sie sicher, dass Sie über gut definierte Pydantic-Modelle für Ihre <abbrtitle="Anfragekörper">Requestbodys</abbr> und <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> verfügen.
* Konfigurieren Sie alle erforderlichen Berechtigungen und Rollen mithilfe von Abhängigkeiten.
* Konfigurieren Sie alle erforderlichen Berechtigungen und Rollen mithilfe von Abhängigkeiten.
* Speichern Sie niemals Klartext-Passwörter, sondern nur Passwort-Hashes.
* Speichern Sie niemals Klartext-Passwörter, sondern nur Passwort-Hashes.
* Implementieren und verwenden Sie gängige kryptografische Tools wie Passlib und JWT-Tokens, usw.
* Implementieren und verwenden Sie gängige kryptografische Tools wie Passlib und JWT-Tokens, usw.
@ -50,7 +50,7 @@ Als Nächstes erstellen wir eine benutzerdefinierte Unterklasse von `fastapi.rou
Dieses Mal wird die Methode `APIRoute.get_route_handler()` überschrieben.
Dieses Mal wird die Methode `APIRoute.get_route_handler()` überschrieben.
Diese Methode gibt eine Funktion zurück. Und diese Funktion empfängt einen Request und gibt eine Response zurück.
Diese Methode gibt eine Funktion zurück. Und diese Funktion empfängt einen <abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Request</abbr>und gibt eine <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> zurück.
Hier verwenden wir sie, um aus dem ursprünglichen Request einen `GzipRequest` zu erstellen.
Hier verwenden wir sie, um aus dem ursprünglichen Request einen `GzipRequest` zu erstellen.
@ -12,7 +12,7 @@ Eine `FastAPI`-Anwendung (Instanz) verfügt über eine `.openapi()`-Methode, von
Als Teil der Erstellung des Anwendungsobjekts wird eine *Pfadoperation* für `/openapi.json` (oder welcher Wert für den Parameter `openapi_url` gesetzt wurde) registriert.
Als Teil der Erstellung des Anwendungsobjekts wird eine *Pfadoperation* für `/openapi.json` (oder welcher Wert für den Parameter `openapi_url` gesetzt wurde) registriert.
Diese gibt lediglich eine JSON-Response zurück, mit dem Ergebnis der Methode `.openapi()` der Anwendung.
Diese gibt lediglich eine JSON-<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> zurück, mit dem Ergebnis der Methode `.openapi()` der Anwendung.
Standardmäßig überprüft die Methode `.openapi()` die Eigenschaft `.openapi_schema`, um zu sehen, ob diese Inhalt hat, und gibt diesen zurück.
Standardmäßig überprüft die Methode `.openapi()` die Eigenschaft `.openapi_schema`, um zu sehen, ob diese Inhalt hat, und gibt diesen zurück.
@ -38,7 +38,7 @@ Wenn Sie jedoch dasselbe Modell als Ausgabe verwenden, wie hier:
### Modell für Ausgabe-Responsedaten { #model-for-output-response-data }
### Modell für Ausgabe-Responsedaten { #model-for-output-response-data }
Wenn Sie mit der Dokumentation interagieren und die Response überprüfen, enthält die JSON-Response den Defaultwert (`null`), obwohl der Code nichts in eines der `description`-Felder geschrieben hat:
Wenn Sie mit der Dokumentation interagieren und die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> überprüfen, enthält die JSON-Response den Defaultwert (`null`), obwohl der Code nichts in eines der `description`-Felder geschrieben hat:
@ -241,7 +241,7 @@ Sie können mehr darüber in der <a href="https://fastapi.tiangolo.com/de/fastap
Öffnen Sie Ihren Browser unter <ahref="http://127.0.0.1:8000/items/5?q=somequery"class="external-link"target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>.
Öffnen Sie Ihren Browser unter <ahref="http://127.0.0.1:8000/items/5?q=somequery"class="external-link"target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>.
Sie sehen die JSON-Antwort als:
Sie sehen die JSON-<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> als:
Sie können <abbrtitle="Hintergrund-Aufgaben">Hintergrundtasks</abbr> definieren, die *nach* der Rückgabe einer Response ausgeführt werden sollen.
Sie können <abbrtitle="Hintergrund-Aufgaben">Hintergrundtasks</abbr> definieren, die *nach* der Rückgabe einer <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> ausgeführt werden sollen.
Das ist nützlich für Vorgänge, die nach einem <abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Request</abbr> ausgeführt werden müssen, bei denen der Client jedoch nicht unbedingt auf den Abschluss des Vorgangs warten muss, bevor er die Response erhält.
Das ist nützlich für Vorgänge, die nach einem <abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Request</abbr> ausgeführt werden müssen, bei denen der Client jedoch nicht unbedingt auf den Abschluss des Vorgangs warten muss, bevor er die Response erhält.
@ -323,7 +323,7 @@ Aber wir können immer noch _mehr_ `tags` hinzufügen, die auf eine bestimmte *P
Diese letzte Pfadoperation wird eine Kombination von Tags haben: `["items", "custom"]`.
Diese letzte Pfadoperation wird eine Kombination von Tags haben: `["items", "custom"]`.
Und sie wird auch beide Responses in der Dokumentation haben, eine für `404` und eine für `403`.
Und sie wird auch beide <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> in der Dokumentation haben, eine für `404` und eine für `403`.
Wenn ein Client versucht, einige **zusätzliche Cookies** zu senden, erhält er eine **Error-Response**.
Wenn ein Client versucht, einige **zusätzliche Cookies** zu senden, erhält er eine **Error-<abbr title="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>**.
Arme Cookie-Banner, wie sie sich mühen, Ihre Einwilligung zu erhalten, dass die <abbrtitle="Das ist ein weiterer Scherz. Beachten Sie mich nicht. Trinken Sie einen Kaffee zu Ihrem Keks. ☕">API sie ablehnen darf</abbr>. 🍪
Arme Cookie-Banner, wie sie sich mühen, Ihre Einwilligung zu erhalten, dass die <abbrtitle="Das ist ein weiterer Scherz. Beachten Sie mich nicht. Trinken Sie einen Kaffee zu Ihrem Keks. ☕">API sie ablehnen darf</abbr>. 🍪
@ -69,7 +69,7 @@ Die Middleware antwortet auf zwei besondere Arten von HTTP-Requests ...
Dies sind alle `OPTIONS`-Requests mit `Origin`- und `Access-Control-Request-Method`-Headern.
Dies sind alle `OPTIONS`-Requests mit `Origin`- und `Access-Control-Request-Method`-Headern.
In diesem Fall wird die Middleware den eingehenden Request abfangen und mit entsprechenden CORS-Headern, und entweder einer `200`- oder `400`-Response zu Informationszwecken antworten.
In diesem Fall wird die Middleware den eingehenden Request abfangen und mit entsprechenden CORS-Headern, und entweder einer `200`- oder `400`-<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> zu Informationszwecken antworten.
@ -27,7 +27,7 @@ Tatsächlich verwendet FastAPI diese beiden Dekoratoren intern.
Sie könnten damit beispielsweise eine Datenbanksession erstellen und diese nach Abschluss schließen.
Sie könnten damit beispielsweise eine Datenbanksession erstellen und diese nach Abschluss schließen.
Nur der Code vor und einschließlich der `yield`-Anweisung wird ausgeführt, bevor eine Response erzeugt wird:
Nur der Code vor und einschließlich der `yield`-Anweisung wird ausgeführt, bevor eine <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> erzeugt wird:
@ -166,7 +166,7 @@ Auf diese Weise können wir nur die Unterschiede zwischen den Modellen (mit Klar
## `Union` oder `anyOf` { #union-or-anyof }
## `Union` oder `anyOf` { #union-or-anyof }
Sie können deklarieren, dass eine Response eine <abbrtitle="Union – Verbund, Einheit, Vereinigung: Eines von Mehreren">`Union`</abbr> mehrerer Typen ist, das bedeutet, dass die Response einer von ihnen ist.
Sie können deklarieren, dass eine <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> eine <abbrtitle="Union – Verbund, Einheit, Vereinigung: Eines von Mehreren">`Union`</abbr> mehrerer Typen ist, das bedeutet, dass die Response einer von ihnen ist.
Um HTTP-Responses mit Fehlern an den Client zurückzugeben, verwenden Sie `HTTPException`.
Um HTTP-<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> mit Fehlern an den Client zurückzugeben, verwenden Sie `HTTPException`.
Wenn ein Client versucht, einige **zusätzliche Header** zu senden, erhält er eine **Error-Response**.
Wenn ein Client versucht, einige **zusätzliche Header** zu senden, erhält er eine **Error-<abbr title="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>**.
Zum Beispiel, wenn der Client versucht, einen `tool`-Header mit einem Wert von `plumbus` zu senden, erhält er eine **Error-Response**, die ihm mitteilt, dass der Header-Parameter `tool` nicht erlaubt ist:
Zum Beispiel, wenn der Client versucht, einen `tool`-Header mit einem Wert von `plumbus` zu senden, erhält er eine **Error-Response**, die ihm mitteilt, dass der Header-Parameter `tool` nicht erlaubt ist:
Sie können Middleware zu **FastAPI**-Anwendungen hinzufügen.
Sie können Middleware zu **FastAPI**-Anwendungen hinzufügen.
Eine „Middleware“ ist eine Funktion, die mit jedem **<abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Request</abbr>** arbeitet, bevor er von einer bestimmten *Pfadoperation* verarbeitet wird. Und auch mit jeder **Response**, bevor sie zurückgegeben wird.
Eine „Middleware“ ist eine Funktion, die mit jedem **<abbrtitle="Request – Anfrage: Daten, die der Client zum Server sendet">Request</abbr>** arbeitet, bevor er von einer bestimmten *Pfadoperation* verarbeitet wird. Und auch mit jeder **<abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>**, bevor sie zurückgegeben wird.
* Sie nimmt jeden **Request** entgegen, der an Ihre Anwendung gesendet 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.
* Sie kann dann etwas mit diesem **Request** tun oder beliebigen Code ausführen.
@ -10,7 +10,7 @@ Beachten Sie, dass diese Parameter direkt dem *Pfadoperation-Dekorator* übergeb
## Response-Statuscode { #response-status-code }
## Response-Statuscode { #response-status-code }
Sie können den (HTTP-)`status_code` definieren, der in der Response Ihrer *Pfadoperation* verwendet werden soll.
Sie können den (HTTP-)`status_code` definieren, der in der <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> Ihrer *Pfadoperation* verwendet werden soll.
Sie können direkt den `int`-Code übergeben, etwa `404`.
Sie können direkt den `int`-Code übergeben, etwa `404`.
@ -6,7 +6,7 @@ Sie können Pfad-„Parameter“ oder -„Variablen“ mit der gleichen Syntax d
Der Wert des Pfad-Parameters `item_id` wird Ihrer Funktion als das Argument `item_id` übergeben.
Der Wert des Pfad-Parameters `item_id` wird Ihrer Funktion als das Argument `item_id` übergeben.
Wenn Sie dieses Beispiel ausführen und auf <ahref="http://127.0.0.1:8000/items/foo"class="external-link"target="_blank">http://127.0.0.1:8000/items/foo</a> gehen, sehen Sie als Response:
Wenn Sie dieses Beispiel ausführen und auf <ahref="http://127.0.0.1:8000/items/foo"class="external-link"target="_blank">http://127.0.0.1:8000/items/foo</a> gehen, sehen Sie als <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>:
Wenn ein Client versucht, einige **zusätzliche** Daten in den **Query-Parametern** zu senden, erhält er eine **Error-Response**.
Wenn ein Client versucht, einige **zusätzliche** Daten in den **Query-Parametern** zu senden, erhält er eine **Error-<abbr title="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>**.
Wenn der Client beispielsweise versucht, einen `tool` Query-Parameter mit dem Wert `plumbus` zu senden, wie:
Wenn der Client beispielsweise versucht, einen `tool` Query-Parameter mit dem Wert `plumbus` zu senden, wie:
würden Sie die mehreren `q`-*Query-Parameter*-Werte (`foo` und `bar`) in einer Python-`list` in Ihrer *Pfadoperation-Funktion* im *Funktionsparameter*`q` erhalten.
würden Sie die mehreren `q`-*Query-Parameter*-Werte (`foo` und `bar`) in einer Python-`list` in Ihrer *Pfadoperation-Funktion* im *Funktionsparameter*`q` erhalten.
So wäre die Response zu dieser URL:
So wäre die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> zu dieser URL:
```JSON
```JSON
{
{
@ -314,7 +314,7 @@ Wenn Sie zu:
http://localhost:8000/items/
http://localhost:8000/items/
```
```
gehen, wird der Default für `q` sein: `["foo", "bar"]`, und Ihre Antwort wird sein:
gehen, wird der Default für `q` sein: `["foo", "bar"]`, und Ihre Response wird sein:
@ -161,7 +161,7 @@ Sie erhalten, wie deklariert, eine `list` von `bytes` oder `UploadFile`s.
Sie können auch `from starlette.responses import HTMLResponse` verwenden.
Sie können auch `from starlette.responses import HTMLResponse` verwenden.
**FastAPI** bietet dieselben `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für Sie, den Entwickler. Die meisten verfügbaren Responses kommen aber direkt von Starlette.
**FastAPI** bietet dieselben `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für Sie, den Entwickler. Die meisten verfügbaren <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Responses</abbr> kommen aber direkt von Starlette.
Wenn ein Client versucht, einige zusätzliche Daten zu senden, erhält er eine **Error-Response**.
Wenn ein Client versucht, einige zusätzliche Daten zu senden, erhält er eine **Error-<abbr title="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr>**.
Zum Beispiel, wenn der Client versucht, folgende Formularfelder zu senden:
Zum Beispiel, wenn der Client versucht, folgende Formularfelder zu senden:
Sie können den Typ der <abbrtitle="Response – Antwort: Daten, die zum anfragenden Client zurückgeschickt werden">Response</abbr> deklarieren, indem Sie den **Rückgabetyp** der *Pfadoperation* annotieren.
Sie können den Typ der <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> deklarieren, indem Sie den **Rückgabetyp** der *Pfadoperation* annotieren.
Hierbei können Sie **Typannotationen** genauso verwenden, wie Sie es bei Werten von Funktions-**Parametern** machen; verwenden Sie Pydantic-Modelle, Listen, Dicts und skalare Werte wie Nummern, Booleans, usw.
Hierbei können Sie **Typannotationen** genauso verwenden, wie Sie es bei Werten von Funktions-**Parametern** machen; verwenden Sie Pydantic-Modelle, Listen, Dicts und skalare Werte wie Nummern, Booleans, usw.
Genauso wie Sie ein Responsemodell angeben können, können Sie auch den HTTP-Statuscode für die Response mit dem Parameter `status_code` in jeder der *Pfadoperationen* deklarieren:
Genauso wie Sie ein Responsemodell angeben können, können Sie auch den HTTP-Statuscode für die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> mit dem Parameter `status_code` in jeder der *Pfadoperationen* deklarieren:
@ -148,7 +148,7 @@ Erstellen Sie eine Variable `ALGORITHM` für den Algorithmus, der zum Signieren
Erstellen Sie eine Variable für das Ablaufdatum des Tokens.
Erstellen Sie eine Variable für das Ablaufdatum des Tokens.
Definieren Sie ein Pydantic-Modell, das im Token-Endpunkt für die Response verwendet wird.
Definieren Sie ein Pydantic-Modell, das im Token-Endpunkt für die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> verwendet wird.
Erstellen Sie eine Hilfsfunktion, um einen neuen Zugriffstoken zu generieren.
Erstellen Sie eine Hilfsfunktion, um einen neuen Zugriffstoken zu generieren.
@ -152,7 +152,7 @@ Eine ausführlichere Erklärung von `**user_dict` finden Sie in [der Dokumentati
## Den Token zurückgeben { #return-the-token }
## Den Token zurückgeben { #return-the-token }
Die Response des `token`-Endpunkts muss ein JSON-Objekt sein.
Die <abbrtitle="Response – Antwort: Daten, die der Server zum anfragenden Client zurücksendet">Response</abbr> des `token`-Endpunkts muss ein JSON-Objekt sein.
Es sollte einen `token_type` haben. Da wir in unserem Fall „Bearer“-Token verwenden, sollte der Token-Typ "`bearer`" sein.
Es sollte einen `token_type` haben. Da wir in unserem Fall „Bearer“-Token verwenden, sollte der Token-Typ "`bearer`" sein.