Tutorial FastAPI
ASE WS 2022/23
Setup
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
My First FastAPI app
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.
Eine Datenbank
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
Weitere Aufgaben
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)