]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add German translation for `docs/de/docs/tutorial/bigger-applications.md` (#10554)
authorNils Lindemann <nilslindemann@tutanota.com>
Sat, 30 Mar 2024 20:27:59 +0000 (21:27 +0100)
committerGitHub <noreply@github.com>
Sat, 30 Mar 2024 20:27:59 +0000 (15:27 -0500)
docs/de/docs/tutorial/bigger-applications.md [new file with mode: 0644]

diff --git a/docs/de/docs/tutorial/bigger-applications.md b/docs/de/docs/tutorial/bigger-applications.md
new file mode 100644 (file)
index 0000000..66dee0a
--- /dev/null
@@ -0,0 +1,506 @@
+# GrĂ¶ĂŸere Anwendungen â€“ mehrere Dateien
+
+Wenn Sie eine Anwendung oder eine Web-API erstellen, ist es selten der Fall, dass Sie alles in einer einzigen Datei unterbringen können.
+
+**FastAPI** bietet ein praktisches Werkzeug zur Strukturierung Ihrer Anwendung bei gleichzeitiger Wahrung der FlexibilitĂ€t.
+
+!!! info
+     Wenn Sie von Flask kommen, wĂ€re dies das Ă„quivalent zu Flasks Blueprints.
+
+## Eine Beispiel-Dateistruktur
+
+Nehmen wir an, Sie haben eine Dateistruktur wie diese:
+
+```
+.
+├── app
+│   â”œâ”€â”€ __init__.py
+│   â”œâ”€â”€ main.py
+│   â”œâ”€â”€ dependencies.py
+│   â””── routers
+│   â”‚   â”œâ”€â”€ __init__.py
+│   â”‚   â”œâ”€â”€ items.py
+│   â”‚   â””── users.py
+│   â””── internal
+│       â”œâ”€â”€ __init__.py
+│       â””── admin.py
+```
+
+!!! tip "Tipp"
+    Es gibt mehrere `__init__.py`-Dateien: eine in jedem Verzeichnis oder Unterverzeichnis.
+
+    Das ermöglicht den Import von Code aus einer Datei in eine andere.
+
+    In `app/main.py` könnten Sie beispielsweise eine Zeile wie diese haben:
+
+    ```
+    from app.routers import items
+    ```
+
+* Das Verzeichnis `app` enthĂ€lt alles. Und es hat eine leere Datei `app/__init__.py`, es handelt sich also um ein â€žPython-Package“ (eine Sammlung von â€žPython-Modulen“): `app`.
+* Es enthĂ€lt eine Datei `app/main.py`. Da sie sich in einem Python-Package (einem Verzeichnis mit einer Datei `__init__.py`) befindet, ist sie ein â€žModul“ dieses Packages: `app.main`.
+* Es gibt auch eine Datei `app/dependencies.py`, genau wie `app/main.py` ist sie ein â€žModul“: `app.dependencies`.
+* Es gibt ein Unterverzeichnis `app/routers/` mit einer weiteren Datei `__init__.py`, es handelt sich also um ein â€žPython-Subpackage“: `app.routers`.
+* Die Datei `app/routers/items.py` befindet sich in einem Package, `app/routers/`, also ist sie ein Submodul: `app.routers.items`.
+* Das Gleiche gilt fĂŒr `app/routers/users.py`, es ist ein weiteres Submodul: `app.routers.users`.
+* Es gibt auch ein Unterverzeichnis `app/internal/` mit einer weiteren Datei `__init__.py`, es handelt sich also um ein weiteres â€žPython-Subpackage“: `app.internal`.
+* Und die Datei `app/internal/admin.py` ist ein weiteres Submodul: `app.internal.admin`.
+
+<img src="/img/tutorial/bigger-applications/package.svg">
+
+Die gleiche Dateistruktur mit Kommentaren:
+
+```
+.
+├── app                  # â€žapp“ ist ein Python-Package
+│   â”œâ”€â”€ __init__.py      # diese Datei macht â€žapp“ zu einem â€žPython-Package“
+│   â”œâ”€â”€ main.py          # â€žmain“-Modul, z. B. import app.main
+│   â”œâ”€â”€ dependencies.py  # â€ždependencies“-Modul, z. B. import app.dependencies
+│   â””── routers          # â€žrouters“ ist ein â€žPython-Subpackage“
+│   â”‚   â”œâ”€â”€ __init__.py  # macht â€žrouters“ zu einem â€žPython-Subpackage“
+│   â”‚   â”œâ”€â”€ items.py     # â€žitems“-Submodul, z. B. import app.routers.items
+│   â”‚   â””── users.py     # â€žusers“-Submodul, z. B. import app.routers.users
+│   â””── internal         # â€žinternal“ ist ein â€žPython-Subpackage“
+│       â”œâ”€â”€ __init__.py  # macht â€žinternal“ zu einem â€žPython-Subpackage“
+│       â””── admin.py     # â€žadmin“-Submodul, z. B. import app.internal.admin
+```
+
+## `APIRouter`
+
+Nehmen wir an, die Datei, die nur fĂŒr die Verwaltung von Benutzern zustĂ€ndig ist, ist das Submodul unter `/app/routers/users.py`.
+
+Sie möchten die *Pfadoperationen* fĂŒr Ihre Benutzer vom Rest des Codes trennen, um ihn organisiert zu halten.
+
+Aber es ist immer noch Teil derselben **FastAPI**-Anwendung/Web-API (es ist Teil desselben â€žPython-Packages“).
+
+Sie können die *Pfadoperationen* fĂŒr dieses Modul mit `APIRouter` erstellen.
+
+### `APIRouter` importieren
+
+Sie importieren ihn und erstellen eine â€žInstanz“ auf die gleiche Weise wie mit der Klasse `FastAPI`:
+
+```Python hl_lines="1  3" title="app/routers/users.py"
+{!../../../docs_src/bigger_applications/app/routers/users.py!}
+```
+
+### *Pfadoperationen* mit `APIRouter`
+
+Und dann verwenden Sie ihn, um Ihre *Pfadoperationen* zu deklarieren.
+
+Verwenden Sie ihn auf die gleiche Weise wie die Klasse `FastAPI`:
+
+```Python hl_lines="6  11  16" title="app/routers/users.py"
+{!../../../docs_src/bigger_applications/app/routers/users.py!}
+```
+
+Sie können sich `APIRouter` als eine â€žMini-`FastAPI`“-Klasse vorstellen.
+
+Alle die gleichen Optionen werden unterstĂŒtzt.
+
+Alle die gleichen `parameters`, `responses`, `dependencies`, `tags`, usw.
+
+!!! tip "Tipp"
+    In diesem Beispiel heißt die Variable `router`, aber Sie können ihr einen beliebigen Namen geben.
+
+Wir werden diesen `APIRouter` in die Hauptanwendung `FastAPI` einbinden, aber zuerst kĂŒmmern wir uns um die AbhĂ€ngigkeiten und einen anderen `APIRouter`.
+
+## AbhĂ€ngigkeiten
+
+Wir sehen, dass wir einige AbhĂ€ngigkeiten benötigen, die an mehreren Stellen der Anwendung verwendet werden.
+
+Also fĂŒgen wir sie in ihr eigenes `dependencies`-Modul (`app/dependencies.py`) ein.
+
+Wir werden nun eine einfache AbhĂ€ngigkeit verwenden, um einen benutzerdefinierten `X-Token`-Header zu lesen:
+
+=== "Python 3.9+"
+
+    ```Python hl_lines="3  6-8" title="app/dependencies.py"
+    {!> ../../../docs_src/bigger_applications/app_an_py39/dependencies.py!}
+    ```
+
+=== "Python 3.8+"
+
+    ```Python hl_lines="1  5-7" title="app/dependencies.py"
+    {!> ../../../docs_src/bigger_applications/app_an/dependencies.py!}
+    ```
+
+=== "Python 3.8+ nicht annotiert"
+
+    !!! tip "Tipp"
+        Bevorzugen Sie die `Annotated`-Version, falls möglich.
+
+    ```Python hl_lines="1  4-6" title="app/dependencies.py"
+    {!> ../../../docs_src/bigger_applications/app/dependencies.py!}
+    ```
+
+!!! tip "Tipp"
+    Um dieses Beispiel zu vereinfachen, verwenden wir einen erfundenen Header.
+
+    Aber in der Praxis werden Sie mit den integrierten [Sicherheits-Werkzeugen](security/index.md){.internal-link target=_blank} bessere Ergebnisse erzielen.
+
+## Ein weiteres Modul mit `APIRouter`.
+
+Nehmen wir an, Sie haben im Modul unter `app/routers/items.py` auch die Endpunkte, die fĂŒr die Verarbeitung von Artikeln („Items“) aus Ihrer Anwendung vorgesehen sind.
+
+Sie haben *Pfadoperationen* fĂŒr:
+
+* `/items/`
+* `/items/{item_id}`
+
+Es ist alles die gleiche Struktur wie bei `app/routers/users.py`.
+
+Aber wir wollen schlauer sein und den Code etwas vereinfachen.
+
+Wir wissen, dass alle *Pfadoperationen* in diesem Modul folgendes haben:
+
+* Pfad-`prefix`: `/items`.
+* `tags`: (nur ein Tag: `items`).
+* ZusĂ€tzliche `responses`.
+* `dependencies`: Sie alle benötigen die von uns erstellte `X-Token`-AbhĂ€ngigkeit.
+
+Anstatt also alles zu jeder *Pfadoperation* hinzuzufĂŒgen, können wir es dem `APIRouter` hinzufĂŒgen.
+
+```Python hl_lines="5-10  16  21" title="app/routers/items.py"
+{!../../../docs_src/bigger_applications/app/routers/items.py!}
+```
+
+Da der Pfad jeder *Pfadoperation* mit `/` beginnen muss, wie in:
+
+```Python hl_lines="1"
+@router.get("/{item_id}")
+async def read_item(item_id: str):
+    ...
+```
+
+... darf das PrĂ€fix kein abschließendes `/` enthalten.
+
+Das PrĂ€fix lautet in diesem Fall also `/items`.
+
+Wir können auch eine Liste von `tags` und zusĂ€tzliche `responses` hinzufĂŒgen, die auf alle in diesem Router enthaltenen *Pfadoperationen* angewendet werden.
+
+Und wir können eine Liste von `dependencies` hinzufĂŒgen, die allen *Pfadoperationen* im Router hinzugefĂŒgt und fĂŒr jeden an sie gerichteten Request ausgefĂŒhrt/aufgelöst werden.
+
+!!! tip "Tipp"
+    Beachten Sie, dass Ă€hnlich wie bei [AbhĂ€ngigkeiten in *Pfadoperation-Dekoratoren*](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank} kein Wert an Ihre *Pfadoperation-Funktion* ĂŒbergeben wird.
+
+Das Endergebnis ist, dass die Pfade fĂŒr diese Artikel jetzt wie folgt lauten:
+
+* `/items/`
+* `/items/{item_id}`
+
+... wie wir es beabsichtigt hatten.
+
+* Sie werden mit einer Liste von Tags gekennzeichnet, die einen einzelnen String `"items"` enthĂ€lt.
+    * Diese â€žTags“ sind besonders nĂŒtzlich fĂŒr die automatischen interaktiven Dokumentationssysteme (unter Verwendung von OpenAPI).
+* Alle enthalten die vordefinierten `responses`.
+* FĂŒr alle diese *Pfadoperationen* wird die Liste der `dependencies` ausgewertet/ausgefĂŒhrt, bevor sie selbst ausgefĂŒhrt werden.
+    * Wenn Sie außerdem AbhĂ€ngigkeiten in einer bestimmten *Pfadoperation* deklarieren, **werden diese ebenfalls ausgefĂŒhrt**.
+    * Zuerst werden die Router-AbhĂ€ngigkeiten ausgefĂŒhrt, dann die [`dependencies` im Dekorator](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank} und dann die normalen ParameterabhĂ€ngigkeiten.
+    * Sie können auch [`Security`-AbhĂ€ngigkeiten mit `scopes`](../advanced/security/oauth2-scopes.md){.internal-link target=_blank} hinzufĂŒgen.
+
+!!! tip "Tipp"
+    `dependencies` im `APIRouter` können beispielsweise verwendet werden, um eine Authentifizierung fĂŒr eine ganze Gruppe von *Pfadoperationen* zu erfordern. Selbst wenn die AbhĂ€ngigkeiten nicht jeder einzeln hinzugefĂŒgt werden.
+
+!!! check
+    Die Parameter `prefix`, `tags`, `responses` und `dependencies` sind (wie in vielen anderen FĂ€llen) nur ein Feature von **FastAPI**, um Ihnen dabei zu helfen, Codeverdoppelung zu vermeiden.
+
+### Die AbhĂ€ngigkeiten importieren
+
+Der folgende Code befindet sich im Modul `app.routers.items`, also in der Datei `app/routers/items.py`.
+
+Und wir mĂŒssen die AbhĂ€ngigkeitsfunktion aus dem Modul `app.dependencies` importieren, also aus der Datei `app/dependencies.py`.
+
+Daher verwenden wir einen relativen Import mit `..` fĂŒr die AbhĂ€ngigkeiten:
+
+```Python hl_lines="3" title="app/routers/items.py"
+{!../../../docs_src/bigger_applications/app/routers/items.py!}
+```
+
+#### Wie relative Importe funktionieren
+
+!!! tip "Tipp"
+    Wenn Sie genau wissen, wie Importe funktionieren, fahren Sie mit dem nĂ€chsten Abschnitt unten fort.
+
+Ein einzelner Punkt `.`, wie in:
+
+```Python
+from .dependencies import get_token_header
+```
+
+wĂŒrde bedeuten:
+
+* Beginnend im selben Package, in dem sich dieses Modul (die Datei `app/routers/items.py`) befindet (das Verzeichnis `app/routers/`) ...
+* finde das Modul `dependencies` (eine imaginĂ€re Datei unter `app/routers/dependencies.py`) ...
+* und importiere daraus die Funktion `get_token_header`.
+
+Aber diese Datei existiert nicht, unsere AbhĂ€ngigkeiten befinden sich in einer Datei unter `app/dependencies.py`.
+
+Erinnern Sie sich, wie unsere Anwendungs-/Dateistruktur aussieht:
+
+<img src="/img/tutorial/bigger-applications/package.svg">
+
+---
+
+Die beiden Punkte `..`, wie in:
+
+```Python
+from ..dependencies import get_token_header
+```
+
+bedeuten:
+
+* Beginnend im selben Package, in dem sich dieses Modul (die Datei `app/routers/items.py`) befindet (das Verzeichnis `app/routers/`) ...
+* gehe zum ĂŒbergeordneten Package (das Verzeichnis `app/`) ...
+* und finde dort das Modul `dependencies` (die Datei unter `app/dependencies.py`) ...
+* und importiere daraus die Funktion `get_token_header`.
+
+Das funktioniert korrekt! đŸŽ‰
+
+---
+
+Das Gleiche gilt, wenn wir drei Punkte `...` verwendet hĂ€tten, wie in:
+
+```Python
+from ...dependencies import get_token_header
+```
+
+Das wĂŒrde bedeuten:
+
+* Beginnend im selben Package, in dem sich dieses Modul (die Datei `app/routers/items.py`) befindet (das Verzeichnis `app/routers/`) ...
+* gehe zum ĂŒbergeordneten Package (das Verzeichnis `app/`) ...
+* gehe dann zum ĂŒbergeordneten Package dieses Packages (es gibt kein ĂŒbergeordnetes Package, `app` ist die oberste Ebene đŸ˜±) ...
+* und finde dort das Modul `dependencies` (die Datei unter `app/dependencies.py`) ...
+* und importiere daraus die Funktion `get_token_header`.
+
+Das wĂŒrde sich auf ein Paket oberhalb von `app/` beziehen, mit seiner eigenen Datei `__init__.py`, usw. Aber das haben wir nicht. Das wĂŒrde in unserem Beispiel also einen Fehler auslösen. đŸšš
+
+Aber jetzt wissen Sie, wie es funktioniert, sodass Sie relative Importe in Ihren eigenen Anwendungen verwenden können, egal wie komplex diese sind. đŸ€“
+
+### Einige benutzerdefinierte `tags`, `responses`, und `dependencies` hinzufĂŒgen
+
+Wir fĂŒgen weder das PrĂ€fix `/items` noch `tags=["items"]` zu jeder *Pfadoperation* hinzu, da wir sie zum `APIRouter` hinzugefĂŒgt haben.
+
+Aber wir können immer noch _mehr_ `tags` hinzufĂŒgen, die auf eine bestimmte *Pfadoperation* angewendet werden, sowie einige zusĂ€tzliche `responses`, die speziell fĂŒr diese *Pfadoperation* gelten:
+
+```Python hl_lines="30-31" title="app/routers/items.py"
+{!../../../docs_src/bigger_applications/app/routers/items.py!}
+```
+
+!!! tip "Tipp"
+    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`.
+
+## Das Haupt-`FastAPI`.
+
+Sehen wir uns nun das Modul unter `app/main.py` an.
+
+Hier importieren und verwenden Sie die Klasse `FastAPI`.
+
+Dies ist die Hauptdatei Ihrer Anwendung, die alles zusammen bindet.
+
+Und da sich der Großteil Ihrer Logik jetzt in seinem eigenen spezifischen Modul befindet, wird die Hauptdatei recht einfach sein.
+
+### `FastAPI` importieren
+
+Sie importieren und erstellen wie gewohnt eine `FastAPI`-Klasse.
+
+Und wir können sogar [globale AbhĂ€ngigkeiten](dependencies/global-dependencies.md){.internal-link target=_blank} deklarieren, die mit den AbhĂ€ngigkeiten fĂŒr jeden `APIRouter` kombiniert werden:
+
+```Python hl_lines="1  3  7" title="app/main.py"
+{!../../../docs_src/bigger_applications/app/main.py!}
+```
+
+### Den `APIRouter` importieren
+
+Jetzt importieren wir die anderen Submodule, die `APIRouter` haben:
+
+```Python hl_lines="4-5" title="app/main.py"
+{!../../../docs_src/bigger_applications/app/main.py!}
+```
+
+Da es sich bei den Dateien `app/routers/users.py` und `app/routers/items.py` um Submodule handelt, die Teil desselben Python-Packages `app` sind, können wir einen einzelnen Punkt `.` verwenden, um sie mit â€žrelativen Imports“ zu importieren.
+
+### Wie das Importieren funktioniert
+
+Die Sektion:
+
+```Python
+from .routers import items, users
+```
+
+bedeutet:
+
+* Beginnend im selben Package, in dem sich dieses Modul (die Datei `app/main.py`) befindet (das Verzeichnis `app/`) ...
+* Suche nach dem Subpackage `routers` (das Verzeichnis unter `app/routers/`) ...
+* und importiere daraus die Submodule `items` (die Datei unter `app/routers/items.py`) und `users` (die Datei unter `app/routers/users.py`) ...
+
+Das Modul `items` verfĂŒgt ĂŒber eine Variable `router` (`items.router`). Das ist dieselbe, die wir in der Datei `app/routers/items.py` erstellt haben, es ist ein `APIRouter`-Objekt.
+
+Und dann machen wir das gleiche fĂŒr das Modul `users`.
+
+Wir könnten sie auch wie folgt importieren:
+
+```Python
+from app.routers import items, users
+```
+
+!!! info
+    Die erste Version ist ein â€žrelativer Import“:
+
+    ```Python
+    from .routers import items, users
+    ```
+
+    Die zweite Version ist ein â€žabsoluter Import“:
+
+    ```Python
+    from app.routers import items, users
+    ```
+
+    Um mehr ĂŒber Python-Packages und -Module zu erfahren, lesen Sie <a href="https://docs.python.org/3/tutorial/modules.html" class="external-link" target="_blank">die offizielle Python-Dokumentation ĂŒber Module</a>.
+
+### Namenskollisionen vermeiden
+
+Wir importieren das Submodul `items` direkt, anstatt nur seine Variable `router` zu importieren.
+
+Das liegt daran, dass wir im Submodul `users` auch eine weitere Variable namens `router` haben.
+
+Wenn wir eine nach der anderen importiert hĂ€tten, etwa:
+
+```Python
+from .routers.items import router
+from .routers.users import router
+```
+
+wĂŒrde der `router` von `users` den von `items` ĂŒberschreiben und wir könnten sie nicht gleichzeitig verwenden.
+
+Um also beide in derselben Datei verwenden zu können, importieren wir die Submodule direkt:
+
+```Python hl_lines="5" title="app/main.py"
+{!../../../docs_src/bigger_applications/app/main.py!}
+```
+
+
+### Die `APIRouter` fĂŒr `users` und `items` inkludieren
+
+Inkludieren wir nun die `router` aus diesen Submodulen `users` und `items`:
+
+```Python hl_lines="10-11" title="app/main.py"
+{!../../../docs_src/bigger_applications/app/main.py!}
+```
+
+!!! info
+    `users.router` enthĂ€lt den `APIRouter` in der Datei `app/routers/users.py`.
+
+    Und `items.router` enthĂ€lt den `APIRouter` in der Datei `app/routers/items.py`.
+
+Mit `app.include_router()` können wir jeden `APIRouter` zur Hauptanwendung `FastAPI` hinzufĂŒgen.
+
+Es wird alle Routen von diesem Router als Teil von dieser inkludieren.
+
+!!! note "Technische Details"
+    TatsĂ€chlich wird intern eine *Pfadoperation* fĂŒr jede *Pfadoperation* erstellt, die im `APIRouter` deklariert wurde.
+
+    Hinter den Kulissen wird es also tatsĂ€chlich so funktionieren, als ob alles dieselbe einzige Anwendung wĂ€re.
+
+!!! check
+    Bei der Einbindung von Routern mĂŒssen Sie sich keine Gedanken ĂŒber die Performanz machen.
+
+    Dies dauert Mikrosekunden und geschieht nur beim Start.
+
+    Es hat also keinen Einfluss auf die Leistung. âšĄ
+
+### Einen `APIRouter` mit benutzerdefinierten `prefix`, `tags`, `responses` und `dependencies` einfĂŒgen
+
+Stellen wir uns nun vor, dass Ihre Organisation Ihnen die Datei `app/internal/admin.py` gegeben hat.
+
+Sie enthĂ€lt einen `APIRouter` mit einigen administrativen *Pfadoperationen*, die Ihre Organisation zwischen mehreren Projekten teilt.
+
+In diesem Beispiel wird es ganz einfach sein. Nehmen wir jedoch an, dass wir, da sie mit anderen Projekten in der Organisation geteilt wird, sie nicht Ă€ndern und kein `prefix`, `dependencies`, `tags`, usw. direkt zum `APIRouter` hinzufĂŒgen können:
+
+```Python hl_lines="3" title="app/internal/admin.py"
+{!../../../docs_src/bigger_applications/app/internal/admin.py!}
+```
+
+Aber wir möchten immer noch ein benutzerdefiniertes `prefix` festlegen, wenn wir den `APIRouter` einbinden, sodass alle seine *Pfadoperationen* mit `/admin` beginnen, wir möchten es mit den `dependencies` sichern, die wir bereits fĂŒr dieses Projekt haben, und wir möchten `tags` und `responses` hinzufĂŒgen.
+
+Wir können das alles deklarieren, ohne den ursprĂŒnglichen `APIRouter` Ă€ndern zu mĂŒssen, indem wir diese Parameter an `app.include_router()` ĂŒbergeben:
+
+```Python hl_lines="14-17" title="app/main.py"
+{!../../../docs_src/bigger_applications/app/main.py!}
+```
+
+Auf diese Weise bleibt der ursprĂŒngliche `APIRouter` unverĂ€ndert, sodass wir dieselbe `app/internal/admin.py`-Datei weiterhin mit anderen Projekten in der Organisation teilen können.
+
+Das Ergebnis ist, dass in unserer Anwendung jede der *Pfadoperationen* aus dem Modul `admin` Folgendes haben wird:
+
+* Das PrĂ€fix `/admin`.
+* Den Tag `admin`.
+* Die AbhĂ€ngigkeit `get_token_header`.
+* Die Response `418`. đŸ”
+
+Dies wirkt sich jedoch nur auf diesen `APIRouter` in unserer Anwendung aus, nicht auf anderen Code, der ihn verwendet.
+
+So könnten beispielsweise andere Projekte denselben `APIRouter` mit einer anderen Authentifizierungsmethode verwenden.
+
+### Eine *Pfadoperation* hinzufĂŒgen
+
+Wir können *Pfadoperationen* auch direkt zur `FastAPI`-App hinzufĂŒgen.
+
+Hier machen wir es ... nur um zu zeigen, dass wir es können đŸ€·:
+
+```Python hl_lines="21-23" title="app/main.py"
+{!../../../docs_src/bigger_applications/app/main.py!}
+```
+
+und es wird korrekt funktionieren, zusammen mit allen anderen *Pfadoperationen*, die mit `app.include_router()` hinzugefĂŒgt wurden.
+
+!!! info "Sehr technische Details"
+    **Hinweis**: Dies ist ein sehr technisches Detail, das Sie wahrscheinlich **einfach ĂŒberspringen** können.
+
+    ---
+
+    Die `APIRouter` sind nicht â€žgemountet“, sie sind nicht vom Rest der Anwendung isoliert.
+
+    Das liegt daran, dass wir deren *Pfadoperationen* in das OpenAPI-Schema und die BenutzeroberflĂ€chen einbinden möchten.
+
+    Da wir sie nicht einfach isolieren und unabhĂ€ngig vom Rest â€žmounten“ können, werden die *Pfadoperationen* â€žgeklont“ (neu erstellt) und nicht direkt einbezogen.
+
+## Es in der automatischen API-Dokumentation ansehen
+
+FĂŒhren Sie nun `uvicorn` aus, indem Sie das Modul `app.main` und die Variable `app` verwenden:
+
+<div class="termy">
+
+```console
+$ uvicorn app.main:app --reload
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+und Ă¶ffnen Sie die Dokumentation unter <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+
+Sie sehen die automatische API-Dokumentation, einschließlich der Pfade aller Submodule, mit den richtigen Pfaden (und PrĂ€fixen) und den richtigen Tags:
+
+<img src="/img/tutorial/bigger-applications/image01.png">
+
+## Den gleichen Router mehrmals mit unterschiedlichem `prefix` inkludieren
+
+Sie können `.include_router()` auch mehrmals mit *demselben* Router und unterschiedlichen PrĂ€fixen verwenden.
+
+Dies könnte beispielsweise nĂŒtzlich sein, um dieselbe API unter verschiedenen PrĂ€fixen verfĂŒgbar zu machen, z. B. `/api/v1` und `/api/latest`.
+
+Dies ist eine fortgeschrittene Verwendung, die Sie möglicherweise nicht wirklich benötigen, aber fĂŒr den Fall, dass Sie sie benötigen, ist sie vorhanden.
+
+## Einen `APIRouter` in einen anderen einfĂŒgen
+
+Auf die gleiche Weise, wie Sie einen `APIRouter` in eine `FastAPI`-Anwendung einbinden können, können Sie einen `APIRouter` in einen anderen `APIRouter` einbinden, indem Sie Folgendes verwenden:
+
+```Python
+router.include_router(other_router)
+```
+
+Stellen Sie sicher, dass Sie dies tun, bevor Sie `router` in die `FastAPI`-App einbinden, damit auch die *Pfadoperationen* von `other_router` inkludiert werden.