Backend Python i FastAPI — moderni i skalabilni API-ji
FastAPI je referentni Python framework za asinkrone REST API-je. Spaja izvorne Python type hintove s automatskom Pydantic validacijom, automatski generiranom OpenAPI dokumentacijom i ASGI performansama usporedivima s Node.js-om — bez žrtvovanja čitljivosti koda.
FastAPI — najbrži Python framework
FastAPI se izvodi na Uvicornu (ASGI poslužitelj) uz Gunicorn za višeprocesni rad u produkciji. Izvorni Dependency Injection omogućuje izolirano testiranje bilo kojeg sloja bez složenih mockova: autentifikacija, database session, rate limiting — svaki je ubrizgavajuća ovisnost.
OpenAPI 3.1 dokumentacija automatski se generira iz type hintova — Swagger UI i ReDoc dostupni su na `/docs` i `/redoc` u razvoju. Pydantic v2 shema (validator temeljen na Rustu) validira zahtjeve i odgovore 10–20 puta brže od Pydantica v1. Svako neispravno polje vraća 422 s jasnim, lokaliziranim porukama o pogrešci.
- Izvorni async/await — neblokirajući I/O na svim operacijama s bazom i HTTP-om
- BackgroundTasks za operacije nakon odgovora (e-pošta, webhook, log)
- Izvorna podrška za WebSocket za funkcionalnosti u stvarnom vremenu (chat, obavijesti)
- Rate limiting sa slowapijem (temeljen na limits) — po IP-u i po korisniku
- Middleware CORS, kompresija (gzip/brotli), request ID, mjerenje vremena
PostgreSQL, SQLAlchemy i Alembic
Za sve operacije s bazom koristimo SQLAlchemy 2.0 async (asyncpg driver). Modeli se definiraju s Mapped tipovima — type-safe, bez stringova. Složeni upiti pišu se u SQLAlchemy Coreu (provjera pri kompajliranju) ili čistim SQL-om preko `text()` s bind parametrima — nikad interpolacijom stringova (potpuna prevencija SQLi-ja).
Alembic migracije automatski se generiraju iz promjena modela i ručno pregledavaju prije primjene. Svaka migracija ima testirane `upgrade()` i `downgrade()`. U produkciji se migracije izvode u CI-ju prije deploya — baza je uvijek sinkronizirana s kodom. Connection pooling putem asyncpga s veličinom poola koja se konfigurira po servisu.
- Row-level locking sa `SELECT ... FOR UPDATE` za kritične istodobne operacije
- Full-text search s pg_trgm i tsvector — bez Elasticsearcha za jednostavne slučajeve
- JSONB za polustrukturirane podatke s GIN indeksiranjem
- Particionirane tablice za tablice s milijunima redaka (logovi, eventi)
Redis caching i horizontalno skaliranje
Redis 7 koristi se za aplikacijski cache (TTL po endpointu), session store (JWT refresh tokeni sa selektivnim opozivom), pub/sub za evente u stvarnom vremenu i redove za pozadinske poslove (Celery ili ARQ). Strategija cachiranja je cache-aside s eksplicitnom invalidacijom — ne slijepi TTL koji može posluživati zastarjele podatke.
- JWT autentifikacija s access tokenom (15 min) + Redis refresh tokenom (7 dana)
- Celery + Redis broker za asinkrone zadatke (generiranje PDF-a, e-pošta, uvozi)
- Health check endpoint `/health` sa statusom baze, Redisa i verzijom deploya
- Strukturirano JSON logiranje (structlog) — kompatibilno s Loki/Datadog/ELK
Prednosti i ograničenja
Prednosti
- ASGI performanse usporedive s Node.js-om i Goom na I/O-u.
- OpenAPI dokumentacija automatski generirana iz type hintova.
- Brza Pydantic v2 validacija s jasnim 422 pogreškama.
- Čitljiv kod, Python poznat većini timova.
Ograničenja
- Python je i dalje sporiji od Goa ili Rusta na zadacima intenzivnim za CPU.
- async/await traži disciplinu — jedan blokirajući poziv blokira cijeli event loop.
- Mlađi ekosustav od Djanga za funkcije „sve uključeno“.
- Ne uključuje ugrađeni ORM ni admin — birate ih zasebno.
Kratak zaključak
Odaberite FastAPI za asinkrone REST API-je, mikroservise i backendove za SPA/mobilne aplikacije. Za ekstremno CPU-bound aplikacije ili monolite s gotovim adminom prikladniji mogu biti Go odnosno Django.
Tablica specifikacija
| Mogućnost | Granica / prag | Tipična uporaba | |
|---|---|---|---|
| Konkurentnost | async/await, neblokirajući I/O | CPU-bound zahtijeva zasebne workere | API-ji s mnogo poziva prema bazi/HTTP-u |
| Latencija | Niska latencija po endpointu s Redis cacheom | Raste sa serijalizacijom velikih payloada | SaaS backend, mobilno, stvarno vrijeme |
| Validacija i dokumentacija | Pydantic v2 + automatski OpenAPI 3.1 | Složena shema produljuje vrijeme pokretanja | Javni API-ji sa Swagger/ReDoc |
| Tipičan trošak | Otvoreni kod, radi na 1 vCPU-u | Horizontalno skaliranje traži više procesa | Od MVP-a do produkcije |
FastAPI u odnosu na alternative
| Kriterij | FastAPI | Django / Express |
|---|---|---|
| Async performanse | Izvrsne (izvorni ASGI) | Django djelomično, Express dobre |
| Automatska OpenAPI dokumentacija | Da, iz type hintova | Zahtijeva dodatne pakete |
| Ugrađeni admin / ORM | Ne (birate zasebno) | Django: da; Express: ne |
Često postavljana pitanja
Je li FastAPI brži od Djanga?
Da na I/O-u. FastAPI radi asinkrono na ASGI-ju, pa obrađuje mnogo više istodobnih zahtjeva s pozivima prema bazi/HTTP-u nego klasični sinkroni Django. Django, međutim, ima više ugrađenih funkcija.
Za što FastAPI nije prikladan?
Za zadatke intenzivne za CPU (obrada slika, teški numerički izračuni) Python je sporiji od Goa ili Rusta; njih premještate na zasebne workere. Također ne dolazi s gotovim adminom kao Django.
Treba li FastAPI ORM?
Ne nužno. Koristimo SQLAlchemy 2.0 async s Alembicom za migracije, ali možete pisati čisti SQL. ORM nije uključen, pa ga birate prema projektu.
Kako skaliram FastAPI backend?
Horizontalno: pokrećete više Uvicorn procesa pod Gunicornom, iza load balancera, uz Redis cache i teške zadatke prebačene na Celery. Stateless dizajn omogućuje dodavanje instanci prema potrebi.