Tutorial FastAPI

ASE WS 2022/23

Wir arbeiten wie beim letzten Mal als Nutzer root auf einem 'disposable root server' via segfault.net.

ssh root@segfault.net # Password is 'segfault'

Achtung: Der Server ist nicht sicher - keine vertraulichen Infos/Passwörter dort eintippen

Erster Schritt auf dem Server: Informationen zu Netzwerk-Schnittstellen prophylaktisch in einen Text-Editor kopieren Vor allem relevant: der 'reverse' Port, da wir über diesen auf den Server zugreifen werden.

Zweiter Schritt: tmate installieren und ausführen.

apt install tmate
tmate

tmate startet eine tmux-Session und gibt Pfade/Befehle aus, mit denen man der Session remote beitreten kann. Diese Infos am Besten auch in einem Texteditor speichern und 'q' drücken.

Dritter Schritt: uvicorn installieren

apt install uvicorn
import random
import fastapi

fruit = ["Apple", "Banana", "Tomato", "Orange", "Grapefruit"]

app = fastapi.FastAPI()

@app.get("/random")
async def rand(starts_with: str = None):
    global fruit
    if starts_with:
        filtered_fruit = [n for n in fruit if n.lower().startswith(starts_with.lower())]
        if len(filtered_fruit) < 1:
            return {"name": None}
        else:
            random_fruit = random.choice(filtered_fruit)
    else:
        random_fruit = random.choice(fruit)
    return {"fruit": random_fruit}

Starte den uvicorn-Server mit:

uvicorn main:app --reload (lokaler Server)

bzw.

uvicorn --host 0.0.0.0 --port {PORT} main:app --reload (segfault.net)

Ersetze {PORT} ggf. mit dem Reverse-Port

Öffne die URL (localhost:8000 oder HOST:PORT):

localhost:8000/random

localhost:8000/docs

Eine POST-Route

Ergänze main.py um folgenden Code:

@app.post("/new")
async def new(new_fruit: str):
    global fruit
    fruit.append(new_fruit)
    return {"fruit": new_fruit}

Der uvicorn-Server sollte automatisch neustarten, so dass die aktuellste Version läuft.

Lade das Beispiel aus dem FastAPI-Tutorial herunter und starte den uvicorn-Server:

git clone https://github.com/vnurhaqiqi/fastapi-sqlite.git

cd fastapi-sqlite/

uvicorn --host 0.0.0.0 --port {PORT} sql_app.main:app --reload

Lies die FastAPI-Doku und/oder das Ultimate FastAPI tutorial und ergänze Dein Projekt bis zum Freitag, 13.1.2022 um folgende Features:

  • HTTP-Statuscodes implementieren (z.B. 201 - Created bei Anlegen eines Nutzer)
  • Datenbank-Unterstützung einbauen (Vorschlag: SQLite)
  • Datenbank-Tabellen für Räume, Störungen, Benutzer anlegen (und ggf. weitere, wie z.B. Gebäude/teile)
  • Routen zum Import und Export aller Daten, zum Anlegen, Verändern und Löschen von Räumen, Störungen und Benutzern
  • Routen zur Ausgabe von Räumen, Störungen und Benutzern, sowie Filter
  • Dokumentation der einzelnen Routen
  • Optional: Authentisierung über JWT (siehe auch: OAuth)