Przejdź do treści

Cechy

Cechy FastAPI

FastAPI zapewnia Ci następujące korzyści:

Oparcie o standardy open

  • OpenAPI do tworzenia API, w tym deklaracji ścieżek operacji, parametrów, ciał zapytań, bezpieczeństwa, itp.
  • Automatyczna dokumentacja modelu danych za pomocą JSON Schema (ponieważ OpenAPI bazuje na JSON Schema).
  • Zaprojektowane z myślą o zgodności z powyższymi standardami zamiast dodawania ich obsługi po fakcie.
  • Możliwość automatycznego generowania kodu klienta w wielu językach.

Automatyczna dokumentacja

Interaktywna dokumentacja i webowe interfejsy do eksploracji API. Z racji tego, że framework bazuje na OpenAPI, istnieje wiele opcji, z czego 2 są domyślnie dołączone.

  • Swagger UI, z interaktywnym interfejsem - odpytuj i testuj swoje API bezpośrednio z przeglądarki.

Swagger UI interakcja

  • Alternatywna dokumentacja API z ReDoc.

ReDoc

Nowoczesny Python

Wszystko opiera się na standardowych deklaracjach typu Python 3.8 (dzięki Pydantic). Brak nowej składni do uczenia. Po prostu standardowy, współczesny Python.

Jeśli potrzebujesz szybkiego przypomnienia jak używać deklaracji typów w Pythonie (nawet jeśli nie używasz FastAPI), sprawdź krótki samouczek: Python Types.

Wystarczy, że napiszesz standardowe deklaracje typów Pythona:

from datetime import date

from pydantic import BaseModel

# Zadeklaruj parametr jako str
# i uzyskaj wsparcie edytora wewnątrz funkcji
def main(user_id: str):
    return user_id


# Model Pydantic
class User(BaseModel):
    id: int
    name: str
    joined: date

A one będą mogły zostać później użyte w następujący sposób:

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 oznacza:

Przekaż klucze i wartości słownika second_user_data bezpośrednio jako argumenty klucz-wartość, co jest równoznaczne z: User(id=4, name="Mary", joined="2018-11-30")

Wsparcie edytora

Cały framework został zaprojektowany tak, aby był łatwy i intuicyjny w użyciu. Wszystkie pomysły zostały przetestowane na wielu edytorach jeszcze przed rozpoczęciem procesu tworzenia, aby zapewnić najlepsze wrażenia programistyczne.

Ostatnia ankieta Python developer survey jasno wskazuje, że najczęściej używaną funkcjonalnością jest autouzupełnianie w edytorze.

Cała struktura frameworku FastAPI jest na tym oparta. Autouzupełnianie działa wszędzie.

Rzadko będziesz musiał wracać do dokumentacji.

Oto, jak twój edytor może Ci pomóc:

wsparcie edytora

wsparcie edytora

Otrzymasz uzupełnienie nawet w miejscach, w których normalnie uzupełnienia nie ma. Na przykład klucz "price" w treści JSON (który mógł być zagnieżdżony), który pochodzi z zapytania.

Koniec z wpisywaniem błędnych nazw kluczy, przechodzeniem tam i z powrotem w dokumentacji lub przewijaniem w górę i w dół, aby sprawdzić, czy w końcu użyłeś nazwy username czy user_name.

Zwięzłość

Wszystko posiada sensowne domyślne wartości. Wszędzie znajdziesz opcjonalne konfiguracje. Wszystkie parametry możesz dostroić, aby zrobić to co potrzebujesz do zdefiniowania API.

Ale domyślnie wszystko "po prostu działa".

Walidacja

  • Walidacja większości (lub wszystkich?) typów danych Pythona, w tym:

    • Obiektów JSON (dict).
    • Tablic JSON (list) ze zdefiniowanym typem elementów.
    • Pól tekstowych (str) z określeniem minimalnej i maksymalnej długości.
    • Liczb (int, float) z wartościami minimalnymi, maksymalnymi, itp.
  • Walidacja bardziej egzotycznych typów danych, takich jak:

    • URL.
    • Email.
    • UUID.
    • ...i inne.

Cała walidacja jest obsługiwana przez ugruntowaną i solidną bibliotekę Pydantic.

Bezpieczeństwo i uwierzytelnianie

Bezpieczeństwo i uwierzytelnianie jest zintegrowane. Bez żadnych kompromisów z bazami czy modelami danych.

Wszystkie schematy bezpieczeństwa zdefiniowane w OpenAPI, w tym:

  • Podstawowy protokół HTTP.
  • OAuth2 (również z tokenami JWT). Sprawdź samouczek OAuth2 with JWT.
  • Klucze API w:
    • Nagłówkach.
    • Parametrach zapytań.
    • Ciasteczkach, itp.

Plus wszystkie funkcje bezpieczeństwa Starlette (włączając w to ciasteczka sesyjne).

Wszystko zbudowane jako narzędzia i komponenty wielokrotnego użytku, które można łatwo zintegrować z systemami, magazynami oraz bazami danych - relacyjnymi, NoSQL, itp.

Wstrzykiwanie Zależności

FastAPI zawiera niezwykle łatwy w użyciu, ale niezwykle potężny system Wstrzykiwania Zależności.

  • Nawet zależności mogą mieć zależności, tworząc hierarchię lub "graf" zależności.
  • Wszystko jest obsługiwane automatycznie przez framework.
  • Wszystkie zależności mogą wymagać danych w żądaniach oraz rozszerzać ograniczenia i automatyczną dokumentację operacji na ścieżce.
  • Automatyczna walidacja parametrów operacji na ścieżce zdefiniowanych w zależnościach.
  • Obsługa złożonych systemów uwierzytelniania użytkowników, połączeń z bazami danych, itp.
  • Bazy danych, front end, itp. bez kompromisów, ale wciąż łatwe do integracji.

Nieograniczone "wtyczki"

Lub ujmując to inaczej - brak potrzeby wtyczek. Importuj i używaj kod, który potrzebujesz.

Każda integracja została zaprojektowana tak, aby była tak prosta w użyciu (z zależnościami), że możesz utworzyć "wtyczkę" dla swojej aplikacji w 2 liniach kodu, używając tej samej struktury i składni, które są używane w operacjach na ścieżce.

Testy

  • 100% pokrycia kodu testami.
  • 100% adnotacji typów.
  • Używany w aplikacjach produkcyjnych.

Cechy Starlette

FastAPI jest w pełni kompatybilny z (oraz bazuje na) Starlette. Tak więc każdy dodatkowy kod Starlette, który posiadasz, również będzie działał.

FastAPI jest w rzeczywistości podklasą Starlette, więc jeśli już znasz lub używasz Starlette, większość funkcji będzie działać w ten sam sposób.

Dzięki FastAPI otrzymujesz wszystkie funkcje Starlette (ponieważ FastAPI to po prostu Starlette na sterydach):

Cechy Pydantic

FastAPI jest w pełni kompatybilny z (oraz bazuje na) Pydantic. Tak więc każdy dodatkowy kod Pydantic, który posiadasz, również będzie działał.

Wliczając w to zewnętrzne biblioteki, również oparte o Pydantic, takie jak ORM, ODM dla baz danych.

Oznacza to, że w wielu przypadkach możesz przekazać ten sam obiekt, który otrzymasz z żądania bezpośrednio do bazy danych, ponieważ wszystko jest walidowane automatycznie.

Działa to również w drugą stronę, w wielu przypadkach możesz po prostu przekazać obiekt otrzymany z bazy danych bezpośrednio do klienta.

Dzięki FastAPI otrzymujesz wszystkie funkcje Pydantic (ponieważ FastAPI bazuje na Pydantic do obsługi wszystkich danych):

  • Bez prania mózgu:
    • Brak nowego mikrojęzyka do definiowania schematu, którego trzeba się nauczyć.
    • Jeśli znasz adnotacje typów Pythona to wiesz jak używać Pydantic.
  • Dobrze współpracuje z Twoim IDE/linterem/mózgiem:
    • Ponieważ struktury danych Pydantic to po prostu instancje klas, które definiujesz; autouzupełnianie, linting, mypy i twoja intuicja powinny działać poprawnie z Twoimi zwalidowanymi danymi.
  • Walidacja złożonych struktur:
    • Wykorzystanie hierarchicznych modeli Pydantic, Pythonowego modułu typing zawierającego List, Dict, itp.
    • Walidatory umożliwiają jasne i łatwe definiowanie, sprawdzanie złożonych struktur danych oraz dokumentowanie ich jako JSON Schema.
    • Możesz mieć głęboko zagnieżdżone obiekty JSON i wszystkie je poddać walidacji i adnotować.
  • Rozszerzalność:
    • Pydantic umożliwia zdefiniowanie niestandardowych typów danych lub rozszerzenie walidacji o metody na modelu, na których użyty jest dekorator walidatora.
  • 100% pokrycie testami.