FastAPI zapewnia Ci następujące korzyści:
- 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.
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.
- Alternatywna dokumentacja API z ReDoc.
Wszystko opiera się na standardowych deklaracjach typu Python 3.6 (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{.internal-link target=_blank}.
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: dateA 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")`
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:
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.
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 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.
- Obiektów JSON (
-
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 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{.internal-link target=_blank}.
- 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.
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.
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.
- 100% pokrycia kodu testami.
- 100% adnotacji typów.
- Używany w aplikacjach produkcyjnych.
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):
- Bardzo imponująca wydajność. Jest to jeden z najszybszych dostępnych frameworków Pythona, na równi z NodeJS i Go.
- Wsparcie dla WebSocket.
- Zadania w tle.
- Eventy startup i shutdown.
- Klient testowy zbudowany na bazie biblioteki
requests. - CORS, GZip, pliki statyczne, streamy.
- Obsługa sesji i ciasteczek.
- 100% pokrycie testami.
- 100% adnotacji typów.
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.
- Szybkość:
- w benchmarkach Pydantic jest szybszy niż wszystkie inne testowane biblioteki.
- Walidacja złożonych struktur:
- Wykorzystanie hierarchicznych modeli Pydantic, Pythonowego modułu
typingzawierającegoList,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ć.
- Wykorzystanie hierarchicznych modeli Pydantic, Pythonowego modułu
- 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.



