Zum Inhalt

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.

Swagger UI Interaktion

  • Alternative API-Dokumentation mit ReDoc.

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:

editor support

editor support

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.
  • 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ÔÇÖ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.
  • 100% Testabdeckung.