-
-
Notifications
You must be signed in to change notification settings - Fork 9.6k
🌐 Add German translation for docs/de/docs/tutorial/path-params.md
#10290
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
tiangolo
merged 58 commits into
fastapi:master
from
nilslindemann:de/docs/tutorial/path-params.md
Mar 30, 2024
Merged
Changes from all commits
Commits
Show all changes
58 commits
Select commit
Hold shift + click to select a range
0252f0b
German translation of docs/tutorial/path-params.md
3809f5b
Put file into the correct location
c5b62c8
+GeorchW Fix
84b3a26
+GeorchW Fix
ae8130e
+GeorchW Vorschlag
f970084
+GeorchW Fix
4739ac8
+GeorchW Vorschlag
bf38211
+GeorchW Vorschlag
ecc4cd4
+GeorchW Vorschlag
1163b48
+GeorchW Vorschlag
3495486
+GeorchW Vorschlag
4ffbaf9
+GeorchW Vorschlag
2f0f153
+GeorchW Fix
c75548a
+GeorchW Fix
6d6b32d
+GeorchW Fix
10f79c8
+GeorchW Fix
77787d2
+GeorchW Fix
a25667f
+GeorchW Vorschlag
2e1e6a9
+GeorchW Fix
ef802ff
+GeorchW Vorschlag
5815d7f
+GeorchW Vorschlag
bdf4754
+GeorchW Vorschlag
d46dad1
+GeorchW Vorschlag
b75e5ba
+GeorchW Vorschlag
cf8c7d2
+GeorchW Vorschlag
b70609a
+GeorchW Vorschlag
e9baaf6
+GeorchW Vorschlag
19a6b8c
Weniger eindeutschen
94b9d72
Clarify Enum explanation
cbb3bd5
Weniger eindeutschen
9ce41eb
Weniger eindeutschen
75039d9
"Kindklasse" ohne Bindestrich
09663bf
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
aded33c
Improve translation of "path operation"
9877b60
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
5a5cd41
A few improvements
5d76231
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
9b2ecaf
"Performance" -> "Performanz"
e2401db
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
32caf4d
"Normal" -> "Standard"
b51bb26
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
57cf5f7
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
7914f22
Sync with #10043
b1a4077
"Tip" -> "Tipp"
0be5693
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
3e61988
"Nutzer" -> "Benutzer"
73e9e3b
Use typographic quotes
7117666
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
f6568fd
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
a76dd13
"Kindklasse" -> "Unterklasse"
3be35d9
"Standard " -> "Standard-"
3fb48dc
Forgot some "Antwort" -> "Response"
630af03
"Python " -> "Python-", etc.
113fc56
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
544c480
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
75ec88d
"z.B." -> "z. B."
efce289
Remove "-"
a1948e3
Merge branch 'tiangolo:master' into de/docs/tutorial/path-params.md
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,254 @@ | ||
| # Pfad-Parameter | ||
|
|
||
| Sie können Pfad-„Parameter“ oder -„Variablen“ mit der gleichen Syntax deklarieren, welche in Python-<abbr title="Format-String – Formatierter String: Der String enthält Variablen, die mit geschweiften Klammern umschlossen sind. Solche Stellen werden durch den Wert der Variable ersetzt">Format-Strings</abbr> verwendet wird: | ||
|
|
||
| ```Python hl_lines="6-7" | ||
| {!../../../docs_src/path_params/tutorial001.py!} | ||
| ``` | ||
|
|
||
| Der Wert des Pfad-Parameters `item_id` wird Ihrer Funktion als das Argument `item_id` übergeben. | ||
|
|
||
| Wenn Sie dieses Beispiel ausführen und auf <a href="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: | ||
|
|
||
| ```JSON | ||
| {"item_id":"foo"} | ||
| ``` | ||
|
|
||
| ## Pfad-Parameter mit Typen | ||
|
|
||
| Sie können den Typ eines Pfad-Parameters in der Argumentliste der Funktion deklarieren, mit Standard-Python-Typannotationen: | ||
|
|
||
| ```Python hl_lines="7" | ||
| {!../../../docs_src/path_params/tutorial002.py!} | ||
| ``` | ||
|
|
||
| In diesem Fall wird `item_id` als `int` deklariert, also als Ganzzahl. | ||
|
|
||
| !!! check | ||
| Dadurch erhalten Sie Editor-Unterstützung innerhalb Ihrer Funktion, mit Fehlerprüfungen, Codevervollständigung, usw. | ||
|
|
||
| ## Daten-<abbr title="Auch bekannt als: Serialisierung, Parsen, Marshalling">Konversion</abbr> | ||
|
|
||
| Wenn Sie dieses Beispiel ausführen und Ihren Browser unter <a href="http://127.0.0.1:8000/items/3" class="external-link" target="_blank">http://127.0.0.1:8000/items/3</a> öffnen, sehen Sie als Response: | ||
|
|
||
| ```JSON | ||
| {"item_id":3} | ||
| ``` | ||
|
|
||
| !!! check | ||
| Beachten Sie, dass der Wert, den Ihre Funktion erhält und zurückgibt, die Zahl `3` ist, also ein `int`. Nicht der String `"3"`, also ein `str`. | ||
|
|
||
| Sprich, mit dieser Typdeklaration wird **FastAPI** die Anfrage automatisch <abbr title="Den String, der von einer HTTP Anfrage kommt, in Python-Objekte konvertieren">„parsen“</abbr>. | ||
|
|
||
| ## Datenvalidierung | ||
|
|
||
| Wenn Sie aber im Browser <a href="http://127.0.0.1:8000/items/foo" class="external-link" target="_blank">http://127.0.0.1:8000/items/foo</a> besuchen, erhalten Sie eine hübsche HTTP-Fehlermeldung: | ||
|
|
||
| ```JSON | ||
| { | ||
| "detail": [ | ||
| { | ||
| "type": "int_parsing", | ||
| "loc": [ | ||
| "path", | ||
| "item_id" | ||
| ], | ||
| "msg": "Input should be a valid integer, unable to parse string as an integer", | ||
| "input": "foo", | ||
| "url": "https://errors.pydantic.dev/2.1/v/int_parsing" | ||
| } | ||
| ] | ||
| } | ||
| ``` | ||
|
|
||
| Der Pfad-Parameter `item_id` hatte den Wert `"foo"`, was kein `int` ist. | ||
|
|
||
| Die gleiche Fehlermeldung würde angezeigt werden, wenn Sie ein `float` (also eine Kommazahl) statt eines `int`s übergeben würden, wie etwa in: <a href="http://127.0.0.1:8000/items/4.2" class="external-link" target="_blank">http://127.0.0.1:8000/items/4.2</a> | ||
|
|
||
| !!! check | ||
| Sprich, mit der gleichen Python-Typdeklaration gibt Ihnen **FastAPI** Datenvalidierung. | ||
|
|
||
| Beachten Sie, dass die Fehlermeldung auch direkt die Stelle anzeigt, wo die Validierung nicht erfolgreich war. | ||
|
|
||
| Das ist unglaublich hilfreich, wenn Sie Code entwickeln und debuggen, welcher mit ihrer API interagiert. | ||
|
|
||
| ## Dokumentation | ||
|
|
||
| Wenn Sie die Seite <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> in Ihrem Browser öffnen, sehen Sie eine automatische, interaktive API-Dokumentation: | ||
|
|
||
| <img src="/img/tutorial/path-params/image01.png"> | ||
|
|
||
| !!! check | ||
| Wiederum, mit dieser gleichen Python-Typdeklaration gibt Ihnen **FastAPI** eine automatische, interaktive Dokumentation (verwendet die Swagger-Benutzeroberfläche). | ||
|
|
||
| Beachten Sie, dass der Pfad-Parameter dort als Ganzzahl deklariert ist. | ||
|
|
||
| ## Nützliche Standards. Alternative Dokumentation | ||
|
|
||
| Und weil das generierte Schema vom <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md" class="external-link" target="_blank">OpenAPI</a>-Standard kommt, gibt es viele kompatible Tools. | ||
|
|
||
| Zum Beispiel bietet **FastAPI** selbst eine alternative API-Dokumentation (verwendet ReDoc), welche Sie unter <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> einsehen können: | ||
|
|
||
| <img src="/img/tutorial/path-params/image02.png"> | ||
|
|
||
| Und viele weitere kompatible Tools. Inklusive Codegenerierung für viele Sprachen. | ||
|
|
||
| ## Pydantic | ||
|
|
||
| Die ganze Datenvalidierung wird hinter den Kulissen von <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> durchgeführt, Sie profitieren also von dessen Vorteilen. Und Sie wissen, dass Sie in guten Händen sind. | ||
|
|
||
| Sie können für Typ Deklarationen auch `str`, `float`, `bool` und viele andere komplexe Datentypen verwenden. | ||
|
|
||
| Mehrere davon werden wir in den nächsten Kapiteln erkunden. | ||
|
|
||
| ## Die Reihenfolge ist wichtig | ||
|
|
||
| Wenn Sie *Pfadoperationen* erstellen, haben Sie manchmal einen fixen Pfad. | ||
|
|
||
| Etwa `/users/me`, um Daten über den aktuellen Benutzer zu erhalten. | ||
|
|
||
| Und Sie haben auch einen Pfad `/users/{user_id}`, um Daten über einen spezifischen Benutzer zu erhalten, mittels einer Benutzer-ID. | ||
|
|
||
| Weil *Pfadoperationen* in ihrer Reihenfolge ausgewertet werden, müssen Sie sicherstellen, dass der Pfad `/users/me` vor `/users/{user_id}` deklariert wurde: | ||
|
|
||
| ```Python hl_lines="6 11" | ||
| {!../../../docs_src/path_params/tutorial003.py!} | ||
| ``` | ||
|
|
||
| Ansonsten würde der Pfad für `/users/{user_id}` auch `/users/me` auswerten, und annehmen, dass ein Parameter `user_id` mit dem Wert `"me"` übergeben wurde. | ||
|
|
||
| Sie können eine Pfadoperation auch nicht erneut definieren: | ||
|
|
||
| ```Python hl_lines="6 11" | ||
| {!../../../docs_src/path_params/tutorial003b.py!} | ||
| ``` | ||
|
|
||
| Die erste Definition wird immer verwendet werden, da ihr Pfad zuerst übereinstimmt. | ||
|
|
||
| ## Vordefinierte Parameterwerte | ||
|
|
||
| Wenn Sie eine *Pfadoperation* haben, welche einen *Pfad-Parameter* hat, aber Sie wollen, dass dessen gültige Werte vordefiniert sind, können Sie ein Standard-Python <abbr title="Enumeration, oder kurz Enum – Aufzählung">`Enum`</abbr> verwenden. | ||
|
|
||
| ### Erstellen Sie eine `Enum`-Klasse | ||
|
|
||
| Importieren Sie `Enum` und erstellen Sie eine Unterklasse, die von `str` und `Enum` erbt. | ||
|
|
||
| Indem Sie von `str` erben, weiß die API Dokumentation, dass die Werte des Enums vom Typ `str` sein müssen, und wird in der Lage sein, korrekt zu rendern. | ||
|
|
||
| Erstellen Sie dann Klassen-Attribute mit festgelegten Werten, welches die erlaubten Werte sein werden: | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
|
||
| ```Python hl_lines="1 6-9" | ||
| {!../../../docs_src/path_params/tutorial005.py!} | ||
| ``` | ||
|
|
||
| !!! info | ||
| <a href="https://docs.python.org/3/library/enum.html" class="external-link" target="_blank">Enumerationen (oder kurz Enums)</a> gibt es in Python seit Version 3.4. | ||
|
|
||
| !!! tip "Tipp" | ||
| Falls Sie sich fragen, was „AlexNet“, „ResNet“ und „LeNet“ ist, das sind Namen von <abbr title="Genau genommen, Deep-Learning-Modellarchitekturen">Modellen</abbr> für maschinelles Lernen. | ||
|
|
||
| ### Deklarieren Sie einen *Pfad-Parameter* | ||
|
|
||
| Dann erstellen Sie einen *Pfad-Parameter*, der als Typ die gerade erstellte Enum-Klasse hat (`ModelName`): | ||
|
|
||
| ```Python hl_lines="16" | ||
| {!../../../docs_src/path_params/tutorial005.py!} | ||
| ``` | ||
|
|
||
| ### Testen Sie es in der API-Dokumentation | ||
|
|
||
| Weil die erlaubten Werte für den *Pfad-Parameter* nun vordefiniert sind, kann die interaktive Dokumentation sie als Auswahl-Drop-Down anzeigen: | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I guess the common german word is |
||
|
|
||
| <img src="/img/tutorial/path-params/image03.png"> | ||
|
|
||
| ### Mit Python-*<abbr title="Enumeration – Aufzählung">Enums</abbr>* arbeiten | ||
|
|
||
| Der *Pfad-Parameter* wird ein *<abbr title="Member – Mitglied: Einer der möglichen Werte einer Enumeration">Member</abbr> eines Enums* sein. | ||
|
|
||
| #### *Enum-Member* vergleichen | ||
|
|
||
| Sie können ihn mit einem Member Ihres Enums `ModelName` vergleichen: | ||
|
|
||
| ```Python hl_lines="17" | ||
| {!../../../docs_src/path_params/tutorial005.py!} | ||
| ``` | ||
|
|
||
| #### *Enum-Wert* erhalten | ||
|
|
||
| Den tatsächlichen Wert (in diesem Fall ein `str`) erhalten Sie via `model_name.value`, oder generell, `ihr_enum_member.value`: | ||
|
|
||
| ```Python hl_lines="20" | ||
| {!../../../docs_src/path_params/tutorial005.py!} | ||
| ``` | ||
|
|
||
| !!! tip "Tipp" | ||
| Sie können den Wert `"lenet"` außerdem mittels `ModelName.lenet.value` abrufen. | ||
|
|
||
| #### *Enum-Member* zurückgeben | ||
|
|
||
| Sie können *Enum-Member* in ihrer *Pfadoperation* zurückgeben, sogar verschachtelt in einem JSON-Body (z. B. als `dict`). | ||
|
|
||
| Diese werden zu ihren entsprechenden Werten konvertiert (in diesem Fall Strings), bevor sie zum Client übertragen werden: | ||
|
|
||
| ```Python hl_lines="18 21 23" | ||
| {!../../../docs_src/path_params/tutorial005.py!} | ||
| ``` | ||
|
|
||
| In Ihrem Client erhalten Sie eine JSON-Response, wie etwa: | ||
|
|
||
| ```JSON | ||
| { | ||
| "model_name": "alexnet", | ||
| "message": "Deep Learning FTW!" | ||
| } | ||
| ``` | ||
|
|
||
| ## Pfad Parameter die Pfade enthalten | ||
|
|
||
| Angenommen, Sie haben eine *Pfadoperation* mit einem Pfad `/files/{file_path}`. | ||
|
|
||
| Aber `file_path` soll selbst einen *Pfad* enthalten, etwa `home/johndoe/myfile.txt`. | ||
|
|
||
| Sprich, die URL für diese Datei wäre etwas wie: `/files/home/johndoe/myfile.txt`. | ||
|
|
||
| ### OpenAPI Unterstützung | ||
|
|
||
| OpenAPI bietet nicht die Möglichkeit, dass ein *Pfad-Parameter* seinerseits einen *Pfad* enthalten kann, das würde zu Szenarios führen, die schwierig zu testen und zu definieren sind. | ||
|
|
||
| Trotzdem können Sie das in **FastAPI** tun, indem Sie eines der internen Tools von Starlette verwenden. | ||
|
|
||
| Die Dokumentation würde weiterhin funktionieren, allerdings wird nicht dokumentiert werden, dass der Parameter ein Pfad sein sollte. | ||
|
|
||
| ### Pfad Konverter | ||
|
|
||
| Mittels einer Option direkt von Starlette können Sie einen *Pfad-Parameter* deklarieren, der einen Pfad enthalten soll, indem Sie eine URL wie folgt definieren: | ||
|
|
||
| ``` | ||
| /files/{file_path:path} | ||
| ``` | ||
|
|
||
| In diesem Fall ist der Name des Parameters `file_path`. Der letzte Teil, `:path`, sagt aus, dass der Parameter ein *Pfad* sein soll. | ||
|
|
||
| Sie verwenden das also wie folgt: | ||
|
|
||
| ```Python hl_lines="6" | ||
| {!../../../docs_src/path_params/tutorial004.py!} | ||
| ``` | ||
|
|
||
| !!! tip "Tipp" | ||
| Der Parameter könnte einen führenden Schrägstrich (`/`) haben, wie etwa in `/home/johndoe/myfile.txt`. | ||
|
|
||
| In dem Fall wäre die URL: `/files//home/johndoe/myfile.txt`, mit einem doppelten Schrägstrich (`//`) zwischen `files` und `home`. | ||
|
|
||
| ## Zusammenfassung | ||
|
|
||
| In **FastAPI** erhalten Sie mittels kurzer, intuitiver Typdeklarationen: | ||
|
|
||
| * Editor-Unterstützung: Fehlerprüfungen, Codevervollständigung, usw. | ||
| * Daten "<abbr title="Den String, der von einer HTTP Anfrage kommt, nach Python-Daten konvertieren">parsen</abbr>" | ||
| * Datenvalidierung | ||
| * API-Annotationen und automatische Dokumentation | ||
|
|
||
| Und Sie müssen sie nur einmal deklarieren. | ||
|
|
||
| Das ist wahrscheinlich der sichtbarste Unterschied zwischen **FastAPI** und alternativen Frameworks (abgesehen von der reinen Performanz). | ||
|
nilslindemann marked this conversation as resolved.
|
||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
more readable would be something like
Wenn Sie jetzt z.B. in Ihrem Browser die Adresse ... aufrufen, erhalten Sie als Response:but your sentence is fine :)