Merkmale¶
FastAPI Merkmale¶
FastAPI ermöglicht Ihnen folgendes:
Basiert auf offenen Standards¶
- 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.
Automatische Dokumentation¶
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.
- Alternative API-Dokumentation mit ReDoc.
Nur modernes Python¶
Alles basiert auf Python 3.8 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:
from typing import List, Dict
from datetime import date
from pydantic import BaseModel
# Deklariere eine Variable als str
# und bekomme Editor-Unterstütung innerhalb der Funktion
def main(user_id: str):
return user_id
# Ein Pydantic model
class User(BaseModel):
id: int
name: str
joined: date
Dies kann nun wiefolgt benutzt werden:
my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
second_user_data = {
"id": 4,
"name": "Mary",
"joined": "2018-11-30",
}
my_second_user: User = User(**second_user_data)
Info
**second_user_data
bedeutet:
Ü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")
Editor Unterstützung¶
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.
In der letzen Python Entwickler Umfrage stellte sich heraus, dass die meist genutzte Funktion die "Autovervollständigung" ist.
Die gesamte Struktur von FastAPI soll dem gerecht werden. Autovervollständigung funktioniert überall.
Sie müssen selten in die Dokumentation schauen.
So kann ihr Editor Sie unterstützen:
- in PyCharm:
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.
Kompakt¶
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.
Aber standardmäßig, "funktioniert einfach" alles.
Validierung¶
-
Validierung für die meisten (oder alle?) Python Datentypen, hierzu gehören:
- JSON Objekte (
dict
). - JSON Listen (
list
), die den Typ ihrer Elemente definieren. - Zeichenketten (
str
), mit definierter minimaler und maximaler Länge. - Zahlen (
int
,float
) mit minimaler und maximaler Größe, usw.
- JSON Objekte (
-
Validierung für ungewöhnliche Typen, wie:
- URL.
- Email.
- UUID.
- ... und andere.
Die gesamte Validierung übernimmt das etablierte und robuste Pydantic.
Sicherheit und Authentifizierung¶
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.
- Unterstützt komplexe Benutzerauthentifizierungssysteme, Datenbankverbindungen, usw.
- Keine Kompromisse bei Datenbanken, Eingabemasken, usw. Sondern einfache Integration von allen.
Unbegrenzte Erweiterungen¶
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.
Getestet¶
- 100% Testabdeckung.
- 100% Typen annotiert.
- Verwendet in Produktionsanwendungen.
Starlette's Merkmale¶
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):
- Stark beeindruckende Performanz. Es ist eines der schnellsten Python Frameworks, auf Augenhöhe mit NodeJS und Go.
- WebSocket-Unterstützung.
- Hintergrundaufgaben im selben Prozess.
- Ereignisse für das Starten und Herunterfahren.
- Testclient basierend auf HTTPX.
- CORS, GZip, statische Dateien, Antwortfluss.
- Sitzungs und Cookie Unterstützung.
- 100% Testabdeckung.
- 100% Typen annotiert.
Pydantic's Merkmale¶
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
’sList
undDict
, 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.
- Benutzung von hierachischen Pydantic Schemata, Python
- Erweiterbar:
- Pydantic erlaubt die Definition von eigenen Datentypen oder sie können die Validierung mit einer
validator
dekorierten Methode erweitern.
- Pydantic erlaubt die Definition von eigenen Datentypen oder sie können die Validierung mit einer
- 100% Testabdeckung.