.. SPDX-FileCopyrightText: 2021 cusy GmbH
..
.. SPDX-License-Identifier: BSD-3-Clause
Beispiel
========
1. Erstellen
------------
Erstellt die Datei :file:`main.py` mit diesem Inhalt:
.. code-block:: python
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
2. Ausführen
------------
Startet den Server mit dem folgenden Aufruf (hier wieder am Beispiel von
`uvicorn `_):
.. code-block:: console
$ uv run uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [89155] using statreload
INFO: Started server process [89164]
INFO: Waiting for application startup.
INFO: Application startup complete.
3. Überprüfen
-------------
Öffnet euren Webbrowser unter http://127.0.0.1:8000/ und ihr werdet folgendes
sehen:
.. figure:: fastapi-example.png
:alt: FastAPI root
Ihr erhaltet auch eine interaktive API-Dokumentation, die vom `Swagger UI
`_ unter http://127.0.0.1:8000/docs
bereitgestellt wird:
.. figure:: fastapi-docs-example.png
:alt: FastAPI swagger docs
Ihr erhaltet auch eine alternative automatische Dokumentation von `ReDoc
`_ unter http://127.0.0.1:8000/redoc:
.. figure:: fastapi-redoc-example.png
:alt: FastAPI ReDoc documentation
4. Aktualisierungen
-------------------
Jetzt ändern wir die Datei ``main.py`` um einen Text von einer ``PUT``-Anfrage
zu erhalten:
.. code-block:: python
:emphasize-lines: 3,11-14,27-
from typing import Optional
from pydantic import BaseModel
from fastapi import FastAPI
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
Der Server lädt die Datei automatisch neu, da wir den
`uvicorn `_-Aufruf in Schritt 2 mit der Option
``--reload`` ausgeführt haben.
Auch die interaktive API-Dokumentation zeigt nun den neuen Body mit ``PUT``.
Wenn ihr auf die Schaltfläche *Try it out* (aus der Abbildung in Schritt 3)
klickt und einen Wert für den Parameter ``item_id`` angebt, wird beim Klick
auf die *Execute*-Schaltfläche der Parameter vom Browser an das API übertragen
und die Antwort auf dem Bildschirm angezeigt. Nachfolgend seht ihr die Ausgabe
für den beispielhaft eingetragenen Wert ``1234``:
.. code-block:: javascript
{
"item_name": "string",
"item_id": 1234
}