FastAPI
FastAPI – nowoczesny, szybki (high‑performance) framework do budowy interfejsów REST i GraphQL w języku Python. Został zaprojektowany z myślą o maksymalnym wykorzystaniu możliwości asynchronicznego środowiska asyncio oraz o zapewnieniu automatycznej dokumentacji zgodnej ze specyfikacją OpenAPI (wcześniej Swagger).
Historia
Projekt FastAPI został uruchomiony w 2018 roku przez Sebastiana Ramira (Sebastian Ramos) i od tego czasu zyskał szerokie zastosowanie wśród społeczności Pythona. Pierwsza stabilna wersja 0.1.0 pojawiła się w 2018 roku, a kolejne wydania wprowadzały wsparcie dla najnowszych standardów OpenAPI oraz JSON Schema.
Główne cechy
- Wysoka wydajność – oparta na Starlette i Uvicorn, co pozwala na osiąganie prędkości porównywalnej z Node.js oraz Go.
- Typowanie – pełne wykorzystanie PEP 484 oraz Pydantic do walidacji danych i automatycznej konwersji typów.
- Automatyczna dokumentacja – generuje interfejsy Swagger UI i ReDoc w oparciu o OpenAPI.
- Obsługa asynchroniczna – pełne wsparcie dla
async/awaitoraz połączeń WebSocket. - Łatwość testowania – integracja z pytest i wbudowany klient testowy.
Architektura
FastAPI jest warstwą wyższego poziomu nad biblioteką Starlette. Dzięki temu korzysta z:
- Routera – definiuje ścieżki (
/items/,/users/{id}) i obsługuje metody HTTP. - Dependency Injection – system wstrzykiwania zależności umożliwiający definiowanie współdzielonych zasobów (np. połączeń z bazą danych) w sposób deklaratywny.
- Walidatora danych – Pydantic konwertuje i waliduje przychodzące JSON‑y oraz formy danych.
- Silnika asynchronicznego – Uvicorn jako serwer ASGI, który uruchamia aplikację.
Podstawowy przykład
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id, "name": "Przykład"}
@app.post("/items/")
async def create_item(item: Item):
return {"message": "Utworzono", "item": item.dict()}
Powyższy kod demonstruje definicję endpointów GET i POST, automatyczną walidację danych oraz generowaną dokumentację.
Porównanie z innymi frameworkami
| Cecha | FastAPI | Django REST Framework | Flask |
|---|---|---|---|
| Wydajność (req/s) | ≈ 33 000 | ≈ 6 000 | ≈ 8 000 |
| Wsparcie async | Pełne | Częściowe | Od Flask 2.0 |
| Automatyczna dokumentacja | Tak (Swagger, ReDoc) | Nie (wymaga dodatkowych paczek) | Nie |
| Walidacja danych | Pydantic (typy Pythona) | Serializatory | Ręczna |
Zastosowania
FastAPI znajduje zastosowanie w:
- mikroserwisach i architekturach zorientowanych na usługi,
- aplikacjach data‑science, gdzie potrzebna jest szybka integracja modeli uczenia maszynowego (np. poprzez Pydantic),
- systemach IoT i aplikacjach czasu rzeczywistego z WebSocket,
- plikach API gateway i serwerach GraphQL (z dodatkową warstwą konwersji).
Ecosystem i narzędzia
Wokół FastAPI rozwinęła się bogata społeczność i szereg dodatkowych bibliotek:
- FastAPI‑Users – gotowy system uwierzytelniania i zarządzania użytkownikami,
- FastAPI‑SQLAlchemy – proste połączenie z bazą danych przy użyciu SQLAlchemy,
- FastAPI‑JWT‑Auth – obsługa tokenów JWT,
- Tortoise‑ORM – asynchroniczny ORM kompatybilny z FastAPI.
Licencja i rozwój
FastAPI jest rozpowszechniany na licencji MIT. Kod źródłowy znajduje się w publicznym repozytorium GitHub (repozytorium wewnętrzne encyklopedii). Projekt jest aktywnie rozwijany, a nowe wersje pojawiają się regularnie, wprowadzając wsparcie dla OpenAPI 3.1 oraz usprawnienia w obsłudze HTTP/2.
Przyszłość
W najnowszych dyskusjach społeczności przewidywany jest wzrost integracji z WebAssembly, rozwój narzędzi do automatycznego testowania kontraktów API oraz dalsze optymalizacje pod kątem edge computing.
W skrócie, FastAPI łączy w sobie prędkość, prostotę i nowoczesne rozwiązania typowania, co sprawia, że jest jednym z najpopularniejszych frameworków do budowy API w ekosystemie Python w latach 2020‑2026.