Backend Python a FastAPI — moderné a škálovateľné API
FastAPI je referenčný framework Pythonu pre asynchrónne REST API. Spája natívne type hints Pythonu s automatickou validáciou Pydantic, automaticky generovanou dokumentáciou OpenAPI a výkonom ASGI porovnateľným s Node.js — bez obetovania čitateľnosti kódu.
FastAPI — najrýchlejší framework Pythonu
FastAPI beží na Uvicorne (ASGI server) s Gunicornom pre viacprocesové nasadenie v produkcii. Jednoduchý endpoint čítajúci z cache Redis nevykonáva pri zásahu do cache dotaz do databázy. Natívne Dependency Injection umožňuje izolované testovanie ľubovoľnej vrstvy bez zložitých mockov: autentifikácia, databázová session, rate limiting — každé z nich je injektovateľná závislosť.
Dokumentácia OpenAPI 3.1 sa generuje automaticky z type hints — Swagger UI a ReDoc sú dostupné na `/docs` a `/redoc` vo vývoji. Schéma Pydantic v2 (validátor postavený na Ruste) validuje požiadavky a odpovede 10–20-krát rýchlejšie ako Pydantic v1. Každé neplatné pole vráti 422 s jasnými, lokalizovanými chybovými hláseniami.
- Natívne async/await — neblokujúce I/O pri všetkých operáciách s DB a HTTP
- BackgroundTasks pre operácie po odoslaní odpovede (e-mail, webhook, log)
- Natívna podpora WebSocket pre funkcie v reálnom čase (chat, notifikácie)
- Rate limiting so slowapi (postavené na limits) — na IP aj na používateľa
- Middleware CORS, kompresia (gzip/brotli), request ID, timing
PostgreSQL, SQLAlchemy a Alembic
Na všetky operácie s DB používame SQLAlchemy 2.0 async (ovládač asyncpg). Modely sú definované pomocou Mapped types — typovo bezpečne, bez reťazcov. Zložité dotazy píšeme v SQLAlchemy Core (kontrolované pri kompilácii) alebo v čistom SQL cez `text()` s bind parametrami — nikdy cez interpoláciu reťazcov (úplná prevencia SQLi).
Migrácie Alembic sa automaticky generujú zo zmien modelu a pred aplikovaním sa manuálne revidujú. Každá migrácia má otestované `upgrade()` aj `downgrade()`. V produkcii migrácie bežia v CI pred nasadením — databáza je vždy v synchronizácii s kódom. Connection pooling cez asyncpg s veľkosťou poolu konfigurovateľnou pre každú službu.
- Row-level locking cez `SELECT ... FOR UPDATE` pre kritické súbežné operácie
- Full-text search s pg_trgm a tsvector — bez Elasticsearch pre jednoduché prípady
- JSONB pre polo-štruktúrované dáta s indexovaním GIN
- Partition tables pre tabuľky s miliónmi riadkov (logy, udalosti)
Cache Redis a horizontálne škálovanie
Redis 7 sa používa pre aplikačnú cache (TTL pre každý endpoint), session store (JWT refresh tokeny so selektívnym odvolaním), pub/sub pre udalosti v reálnom čase a fronty pre úlohy na pozadí (Celery alebo ARQ). Stratégiou cachovania je cache-aside s explicitnou invalidáciou — nie slepé TTL, ktoré môže servírovať zastarané dáta.
- Autentifikácia JWT s access tokenom (15 min) + refresh tokenom v Redis (7 dní)
- Celery + Redis broker pre asynchrónne úlohy (generovanie PDF, e-maily, importy)
- Health check endpoint `/health` so stavom DB, Redis a verziou nasadenia
- Štruktúrované JSON logovanie (structlog) — kompatibilné s Loki/Datadog/ELK
Výhody a obmedzenia
Výhody
- Výkon ASGI porovnateľný s Node.js a Go pri I/O.
- Dokumentácia OpenAPI automaticky generovaná z type hints.
- Rýchla validácia Pydantic v2 s jasnými chybami 422.
- Čitateľný kód, Python je pre väčšinu tímov známy.
Obmedzenia
- Python je pri úlohách náročných na CPU stále pomalší ako Go alebo Rust.
- async/await vyžaduje disciplínu — jedno blokujúce volanie zablokuje celý event loop.
- Mladší ekosystém ako Django pri funkciách „batteries-included“.
- Neobsahuje vstavaný ORM ani admin — vyberáte si ich samostatne.
Stručné zhrnutie
FastAPI zvoľte pre asynchrónne REST API, mikroslužby a backendy pre SPA/mobilné aplikácie. Pre extrémne CPU-bound aplikácie alebo monolity s hotovým adminom môžu byť vhodnejšie Go, respektíve Django.
Tabuľka špecifikácií
| Schopnosť | Limit / prah | Typické použitie | |
|---|---|---|---|
| Súbežnosť | async/await, neblokujúce I/O | CPU-bound vyžaduje samostatných workerov | API s množstvom volaní DB/HTTP |
| Latencia | Nízka latencia na endpointoch s cache Redis | Rastie so serializáciou veľkých payloadov | Backend SaaS, mobilné aplikácie, real-time |
| Validácia a dokumentácia | Pydantic v2 + OpenAPI 3.1 automaticky | Zložitá schéma predlžuje čas spustenia | Verejné API so Swagger/ReDoc |
| Typické náklady | Open-source, beží na 1 vCPU | Horizontálne škálovanie vyžaduje viac procesov | Od MVP po produkciu |
FastAPI vs alternatívy
| Kritérium | FastAPI | Django / Express |
|---|---|---|
| Async výkon | Výborný (natívne ASGI) | Django čiastočný, Express dobrý |
| Automatická dokumentácia OpenAPI | Áno, z type hints | Vyžaduje ďalšie balíky |
| Vstavaný admin / ORM | Nie (vyberáte samostatne) | Django: áno; Express: nie |
Často kladené otázky
Je FastAPI rýchlejší ako Django?
Áno pri I/O. FastAPI beží asynchrónne na ASGI, takže pri volaniach DB/HTTP zvláda omnoho viac súbežných požiadaviek ako klasický synchrónny Django. Django má však viac vstavaných funkcií.
Na čo FastAPI nie je vhodný?
Pri úlohách silno náročných na CPU (spracovanie obrázkov, ťažké numerické výpočty) je Python pomalší ako Go alebo Rust; tie presuniete na samostatných workerov. A nemá hotový admin ako Django.
Potrebuje FastAPI ORM?
Nie nevyhnutne. Používame SQLAlchemy 2.0 async s Alembicom na migrácie, ale môžete písať čisté SQL. ORM nie je súčasťou, takže si ho vyberiete podľa projektu.
Ako škálovať backend FastAPI?
Horizontálne: spustíte viac procesov Uvicorn pod Gunicornom, za load balancerom, s cache Redis a ťažkými úlohami presunutými na Celery. Stateless dizajn umožňuje pridávať inštancie podľa potreby.