FastAPI ist ein performantes Python 3.6+ Framework mit dem du in wenigen Zeilen eine Web API erstellen kannst.

Vor allem beim Entwickeln von Microservicearchitekturen funktioniert die Kommunikation zwischen den Services oftmals über HTTP(S) Api’s. Aufgrund der großen Menge von API’s willst du möglichst wenig Schreibarbeit mit jeder einzelnen API haben. Das Pythonmodul FastAPI nimmt sich diesem Problem an.

Das Projekt wurde im Dezember 2018 von Sebastián ’tiangolo’ Ramírez auf Github gestellt und wird seitdem aktiv weiterentwickelt. Selbst Firmen wie Microsoft, Uber oder Netflix setzen FastAPI schon ein.

Der Entwickler gibt folgende Features an:

  • Schnell in der Ausführung (vergleichbar mit Go und NodeJS)
  • Schnell zu entwickeln
  • Weniger Bugs (durch menschliche Fehler)
  • Intuitiv
  • Weniger Code
  • Robustheit
  • Halten an API Standards wie OpenAPI (Swagger) und JSON Schema

In diesem Artikel lernst du, wie du das FastAPI Modul einsetzt, um deine eigene API bereitzustellen.

FastAPI installieren

Du kannst FastAPI auf so gut wie allen Systemen installieren, auf denen du auch Python installieren kannst. Das liegt daran, dass es über die Paketverwaltungssoftware pip herunterladbar ist.

Achte darauf, dass du Python in der Version 3.6 (oder höher) sowie pip installiert hast. Letzteres wird meistens automatisch installiert, sobald du Python installierst.

Ist dies geschafft, kannst du fastapi wie folgt über die Kommandozeile installieren.

pip install fastapi

FastAPI greift gerne auf Objekte vom Python-Multipart Modul zu. Also installierst du das am besten auch gleich mit.

pip install python-multipart

Zu guter Letzt brauchst du noch einen Webserver, der deinen ASGI Code ausführt. In diesem Beitrag verwende ich den Webserver Uvicorn. Diesen kannst du auch mit pip installieren.

pip install uvicorn

Erste Schritte

Das einfachste Beispiel ist wie immer Hallo Welt.

Hallo Welt Beispiel

Erstelle eine Datei “main.py” mit folgendem Inhalt.

main.py

from fastapi import FastAPI

app = FastAPI()
@app.get("/")
async def root():
    return {"message": "Hello World"}

Dieser Code liefert einen GET Aufruf, der ein JSON ausgibt.

{ "message": "Hello World"}

Webserver Uvicorn

Du kannst dieses Beispiel mit Uvicorn ausführen.

uvicorn main:app --reload --port 8000
←[32mINFO←[0m:     Started server process [←[36m6228←[0m]
←[32mINFO←[0m:     Waiting for application startup.
←[32mINFO←[0m:     Application startup complete.
←[32mINFO←[0m:     Uvicorn running on ←[1mhttp://127.0.0.1:8000←[0m (Press CTRL+C to quit)

Jetzt läuft dein Hallo Welt Programm in der Konsole. Du kannst mit dem Browser über http://127.0.0.1:8000 darauf zugreifen.

Alternativ, wenn du das Programm nicht über Uvicorn starten, sondern es als Pythonprogramm ausführen willst, kannst du Uvicorn auch importieren.

start.py

import uvicorn
uvicorn.run("main:app", port=8000, log_level="info")
python start.py
←[32mINFO←[0m:     Started server process [←[36m6228←[0m]
←[32mINFO←[0m:     Waiting for application startup.
←[32mINFO←[0m:     Application startup complete.
←[32mINFO←[0m:     Uvicorn running on ←[1mhttp://127.0.0.1:8000←[0m (Press CTRL+C to quit)

Automatische Dokumentation

Da FastAPI hauptsächlich für API’s eingesetzt wird, wird automatisch eine grafische Dokumentation inklusive OpenAPI Beschreibung erstellt.

Solange der Webserver läuft, kannst du über http://127.0.0.1/docs darauf zugreifen.

Diese Dokumentation kannst du im Notfall deaktivieren, indem du beim FastAPI Aufruf den folgenden Parameter setzt.

app = FastAPI(docs_url=None)

Formulardaten per POST

Normalerweise schickt der Browser Daten per POST an eine API. Das kannst du auch mit FastAPI entgegennehmen. Dazu brauchst du neben der FastAPI noch die Form Klasse aus dem fastapi Modul.

Hier mal ein Beispiel wie du Textboxen und Checkboxen entgegennimmst.

main.py

from fastapi import FastAPI, Form
app = FastAPI()

@app.post("/")
async def root(
    name: str = Form(),
    testcheckbox: bool = Form(False)
    ):
    return {"message": f"Hello {name}", "checkbox": testcheckbox}

Und nach wie vor Ausführen.

uvicorn main:app --reload --port 8000
[32mINFO←[0m:     Started server process [[36m6228←[0m]
[32mINFO←[0m:     Waiting for application startup.
[32mINFO←[0m:     Application startup complete.
[32mINFO←[0m:     Uvicorn running on ←[1mhttp://127.0.0.1:8000←[0m (Press CTRL+C to quit)

Um das Programm zu nutzen, kannst du dir ein Formular in HTML bauen und es mit dem Browser öffnen.

<form action="http://localhost:8000/" method="post">
    <textarea rows="5" cols="60" name="name">Hier Namen eingeben</textarea>
    <input type="checkbox" name="testcheckbox" id="testcheckbox">
    <label for="testcheckbox">EineCheckbox</label>
    <br><br>
    <input type="submit" value="Submit">
</form>

Abschluss

In diesem Beitrag haben wir nur an der Oberfläche von FastAPI gekratzt. Man kann noch viel mehr damit machen…

  • Authorisierung
  • Hintergrundtasks
  • CORS
  • Datenbankanbindungen und vieles mehr.

Der Hauptanwendungszweck für FastAPI ist wahrscheinlich der Einsatz in Microservicearchitekturen. In Verbindung mit Docker muss man oft eine API bereitstellen. Durch die flüssige Schreibweise von FastAPI lässt sich das gut bewerkstelligen.

PS: Auch wenn es prinzipiell möglich ist mit FastAPI ganze Webseiten zu bauen solltest du - meiner Meinung nach - dafür lieber auf andere Frameworks wie Django setzen.


Konnte ich helfen? Ich freue mich über einen Drink! 💙