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.
- Alternatywna dokumentacja API z 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:
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.
- 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¶
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):
- 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.
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.
- Szybkość:
- w benchmarkach Pydantic jest szybszy niż wszystkie inne testowane biblioteki.
- Walidacja złożonych struktur:
- Wykorzystanie hierarchicznych modeli Pydantic, Pythonowego modułu
typing
zawierają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.