OpenAPI für API-Erstellung, zusammen mit Deklarationen von Pfad Operationen, Parameter, Nachrichtenrumpf-Anfragen (englisch: body request), Sicherheit, etc.
Automatische Dokumentation der Datenentitäten mit dem JSON Schema (OpenAPI basiert selber auf dem JSON Schema).
Entworfen auf Grundlage dieser Standards nach einer sorgfältigen Studie, statt einer nachträglichen Schicht über diesen Standards.
Dies ermöglicht automatische Quellcode-Generierung auf Benutzerebene in vielen Sprachen.
Mit einer interaktiven API-Dokumentation und explorativen webbasierten Benutzerschnittstellen. Da FastAPI auf OpenAPI basiert, gibt es hierzu mehrere Optionen, wobei zwei standardmäßig vorhanden sind.
Swagger UI, bietet interaktive Exploration: testen und rufen Sie ihre API direkt vom Webbrowser auf.
Alles basiert auf Python 3.6 Typ-Deklarationen (dank Pydantic). Es muss keine neue Syntax gelernt werden, nur standardisiertes modernes Python.
Wenn Sie eine kurze, zweiminütige, Auffrischung in der Benutzung von Python Typ-Deklarationen benötigen (auch wenn Sie FastAPI nicht nutzen), schauen Sie sich diese kurze Einführung an (Englisch): Python Types{.internal-link target=_blank}.
Sie schreiben Standard-Python mit Typ-Deklarationen:
fromtypingimportList,DictfromdatetimeimportdatefrompydanticimportBaseModel# Deklariere eine Variable als str# und bekomme Editor-Unterstütung innerhalb der Funktiondefmain(user_id:str):returnuser_id# Ein Pydantic modelclassUser(BaseModel):id:intname:strjoined:date
Übergebe die Schlüssel und die zugehörigen Werte des second_user_data Datenwörterbuches direkt als Schlüssel-Wert Argumente, äquivalent zu: User(id=4, name="Mary", joined="2018-11-30")
FastAPI wurde so entworfen, dass es einfach und intuitiv zu benutzen ist; alle Entscheidungen wurden auf mehreren Editoren getestet (sogar vor der eigentlichen Implementierung), um so eine best mögliche Entwicklererfahrung zu gewährleisten.
Sie bekommen Autovervollständigung an Stellen, an denen Sie dies vorher nicht für möglich gehalten hätten. Zum Beispiel der price Schlüssel aus einem JSON Datensatz (dieser könnte auch verschachtelt sein) aus einer Anfrage.
Hierdurch werden Sie nie wieder einen falschen Schlüsselnamen benutzen und sparen sich lästiges Suchen in der Dokumentation, um beispielsweise herauszufinden ob Sie username oder user_name als Schlüssel verwenden.
FastAPI nutzt für alles sensible Standard-Einstellungen, welche optional überall konfiguriert werden können. Alle Parameter können ganz genau an Ihre Bedürfnisse angepasst werden, sodass sie genau die API definieren können, die sie brauchen.
Integrierte Sicherheit und Authentifizierung. Ohne Kompromisse bei Datenbanken oder Datenmodellen.
Unterstützt werden alle von OpenAPI definierten Sicherheitsschemata, hierzu gehören:
HTTP Basis Authentifizierung.
OAuth2 (auch mit JWT Zugriffstokens). Schauen Sie sich hierzu dieses Tutorial an: OAuth2 mit JWT.
API Schlüssel in:
Kopfzeile (HTTP Header).
Anfrageparametern.
Cookies, etc.
Zusätzlich gibt es alle Sicherheitsfunktionen von Starlette (auch session cookies).
Alles wurde als wiederverwendbare Werkzeuge und Komponenten geschaffen, die einfach in ihre Systeme, Datenablagen, relationale und nicht-relationale Datenbanken, ..., integriert werden können.
Einbringen von Abhängigkeiten (meist: Dependency Injection)¶
FastAPI enthält ein extrem einfaches, aber extrem mächtiges Dependency Injection System.
Selbst Abhängigkeiten können Abhängigkeiten haben, woraus eine Hierachie oder ein "Graph" von Abhängigkeiten entsteht.
Automatische Umsetzung durch FastAPI.
Alle abhängigen Komponenten könnten Daten von Anfragen, Erweiterungen der Pfadoperations-Einschränkungen und der automatisierten Dokumentation benötigen.
Automatische Validierung selbst für Pfadoperationen-Parameter, die in den Abhängigkeiten definiert wurden.
Oder mit anderen Worten, sie werden nicht benötigt. Importieren und nutzen Sie Quellcode nach Bedarf.
Jede Integration wurde so entworfen, dass sie einfach zu nutzen ist (mit Abhängigkeiten), sodass Sie eine Erweiterung für Ihre Anwendung mit nur zwei Zeilen an Quellcode implementieren können. Hierbei nutzen Sie die selbe Struktur und Syntax, wie bei Pfadoperationen.
FastAPI ist vollkommen kompatibel (und basiert auf) Starlette. Das bedeutet, auch ihr eigener Starlette Quellcode funktioniert.
FastAPI ist eigentlich eine Unterklasse von Starlette. Wenn Sie also bereits Starlette kennen oder benutzen, können Sie das meiste Ihres Wissens direkt anwenden.
Mit FastAPI bekommen Sie viele von Starlette's Funktionen (da FastAPI nur Starlette auf Steroiden ist):
FastAPI ist vollkommen kompatibel (und basiert auf) Pydantic. Das bedeutet, auch jeder zusätzliche Pydantic Quellcode funktioniert.
Verfügbar sind ebenso externe auf Pydantic basierende Bibliotheken, wie ORMs, ODMs für Datenbanken.
Daher können Sie in vielen Fällen das Objekt einer Anfrage direkt zur Datenbank schicken, weil alles automatisch validiert wird.
Das selbe gilt auch für die andere Richtung: Sie können jedes Objekt aus der Datenbank direkt zum Klienten schicken.
Mit FastAPI bekommen Sie alle Funktionen von Pydantic (da FastAPI für die gesamte Datenverarbeitung Pydantic nutzt):
Kein Kopfzerbrechen:
Sie müssen keine neue Schemadefinitionssprache lernen.
Wenn Sie mit Python's Typisierung arbeiten können, können Sie auch mit Pydantic arbeiten.
Gutes Zusammenspiel mit Ihrer/Ihrem IDE/linter/Gehirn:
Weil Datenstrukturen von Pydantic einfach nur Instanzen ihrer definierten Klassen sind, sollten Autovervollständigung, Linting, mypy und ihre Intuition einwandfrei funktionieren.
Schnell:
In Vergleichen ist Pydantic schneller als jede andere getestete Bibliothek.
Validierung von komplexen Strukturen:
Benutzung von hierachischen Pydantic Schemata, Python typing’s List und Dict, etc.
Validierungen erlauben eine klare und einfache Datenschemadefinition, überprüft und dokumentiert als JSON Schema.
Sie können stark verschachtelte JSON Objekte haben und diese sind trotzdem validiert und annotiert.
Erweiterbar:
Pydantic erlaubt die Definition von eigenen Datentypen oder sie können die Validierung mit einer validator dekorierten Methode erweitern.