Backend Python & FastAPI — API moderne dhe të shkallëzueshme
FastAPI është framework-u Python i referencës për API REST asinkrone. Kombinon type hints native të Python me validim automatik Pydantic, dokumentim OpenAPI të gjeneruar automatikisht dhe performancë ASGI të krahasueshme me Node.js — pa sakrifikuar lexueshmërinë e kodit.
FastAPI — framework-u më i shpejtë i Python
FastAPI ekzekutohet mbi Uvicorn (server ASGI) me Gunicorn për multi-process në prodhim. Një endpoint i thjeshtë që lexon nga cache-i Redis shmang një query te baza e të dhënave. Dependency Injection native lejon testimin e izoluar të çdo shtrese pa mock-e të ndërlikuara: autentikimi, sesioni i bazës së të dhënave, rate limiting — secila është një varësi e injektueshme.
Dokumentimi OpenAPI 3.1 gjenerohet automatikisht nga type hints — Swagger UI dhe ReDoc janë të disponueshme te `/docs` dhe `/redoc` në development. Skema Pydantic v2 (validator i bazuar në Rust) i validon kërkesat dhe përgjigjet 10–20 herë më shpejt se Pydantic v1. Çdo fushë e pavlefshme kthen një 422 me mesazhe gabimi të qarta e të lokalizuara.
- async/await native — I/O jobllokues në të gjitha operacionet DB dhe HTTP
- BackgroundTasks për operacione pas përgjigjes (email, webhook, log)
- Mbështetje native për WebSocket për funksione në kohë reale (chat, njoftime)
- Rate limiting me slowapi (i bazuar te limits) — për IP dhe për përdorues
- Middleware CORS, compression (gzip/brotli), request ID, timing
PostgreSQL, SQLAlchemy dhe Alembic
Përdorim SQLAlchemy 2.0 async (driver asyncpg) për të gjitha operacionet DB. Modelet përcaktohen me tipe Mapped — type-safe, pa vargje tekstesh. Query-t e ndërlikuara shkruhen në SQLAlchemy Core (të kontrolluara gjatë kompilimit) ose në SQL të pastër përmes `text()` me parametra bind — kurrë interpolim vargjesh (parandalim i plotë i SQLi).
Migrimet Alembic gjenerohen automatikisht nga ndryshimet e modelit dhe rishikohen manualisht para aplikimit. Çdo migrim ka `upgrade()` dhe `downgrade()` të testuara. Në prodhim, migrimet ekzekutohen në CI para publikimit — baza e të dhënave është gjithmonë në sinkron me kodin. Connection pooling përmes asyncpg me madhësi pool të konfigurueshme për shërbim.
- Row-level locking me `SELECT ... FOR UPDATE` për operacione konkurrente kritike
- Full-text search me pg_trgm dhe tsvector — pa Elasticsearch për raste të thjeshta
- JSONB për të dhëna gjysmë-strukturore me indeksim GIN
- Partition tables për tabela me miliona rreshta (logs, events)
Caching me Redis dhe shkallëzim horizontal
Redis 7 përdoret për cache aplikativ (TTL për endpoint), session store (JWT refresh tokens me revokim selektiv), pub/sub për ngjarje në kohë reale dhe queues për background jobs (Celery ose ARQ). Strategjia e cache-it është cache-aside me anulim eksplicit — jo TTL i verbër që mund të shërbejë të dhëna të vjetruara (stale).
- Autentikim JWT me access token (15min) + refresh token në Redis (7 ditë)
- Celery + Redis broker për detyra asinkrone (gjenerim PDF, email, importe)
- Endpoint health check `/health` me statusin e DB, Redis dhe versionin e publikimit
- Logging JSON i strukturuar (structlog) — i përputhshëm me Loki/Datadog/ELK
Avantazhe dhe kufizime
Avantazhe
- Performancë ASGI e krahasueshme me Node.js dhe Go në I/O.
- Dokumentim OpenAPI i gjeneruar automatikisht nga type hints.
- Validim i shpejtë Pydantic v2, me gabime 422 të qarta.
- Kod i lexueshëm, Python i njohur për shumicën e ekipeve.
Kufizime
- Python mbetet më i ngadaltë se Go ose Rust në detyra intensive për CPU.
- async/await kërkon disiplinë — një thirrje bllokuese e bllokon gjithë event loop-in.
- Ekosistem më i ri se Django për funksione batteries-included.
- Nuk përfshin ORM ose admin built-in — i zgjedh veçmas.
Verdikt i shkurtër
Zgjidh FastAPI për API REST asinkrone, mikroshërbime dhe backend-e për SPA/mobile. Për aplikacione ekstremisht CPU-bound ose monolite me admin të gatshëm, përkatësisht Go dhe Django mund të jenë më të përshtatshme.
Tabela e specifikimeve
| Aftësia | Kufiri / pragu | Përdorimi tipik | |
|---|---|---|---|
| Konkurrenca | async/await, I/O jobllokues | CPU-bound kërkon worker-a të veçantë | API me shumë thirrje DB/HTTP |
| Latenca | Cache Redis para endpoint-eve, pa query te DB | Rritet me serializimin e payload-eve të mëdha | Backend SaaS, mobile, kohë reale |
| Validim & dokumentim | Pydantic v2 + OpenAPI 3.1 auto | Skema e ndërlikuar e rrit kohën e nisjes | API publike me Swagger/ReDoc |
| Kostoja tipike | Open-source, ekzekutohet në 1 vCPU | Shkallëzimi horizontal kërkon më shumë procese | Nga MVP-ja deri në prodhim |
FastAPI kundrejt alternativave
| Kriteri | FastAPI | Django / Express |
|---|---|---|
| Performanca async | Shkëlqyer (ASGI native) | Django pjesërisht, Express e mirë |
| Dokumentim OpenAPI automatik | Po, nga type hints | Kërkon paketa shtesë |
| Admin / ORM built-in | Jo (i zgjedh veçmas) | Django: po; Express: jo |
Pyetje të shpeshta
A është FastAPI më i shpejtë se Django?
Po në I/O. FastAPI ekzekutohet async mbi ASGI, prandaj trajton shumë më tepër kërkesa konkurrente me thirrje DB/HTTP se Django klasik sinkron. Django ka megjithatë më shumë funksione built-in.
Për çfarë nuk është i përshtatshëm FastAPI?
Për detyra shumë CPU-bound (përpunim imazhesh, llogaritje numerike të rënda) Python është më i ngadaltë se Go ose Rust; i zhvendos te worker-a të veçantë. Dhe nuk vjen me admin të gatshëm si Django.
A i duhet FastAPI një ORM?
Jo domosdoshmërisht. Ne përdorim SQLAlchemy 2.0 async me Alembic për migrime, por mund të shkruash SQL të pastër. ORM nuk përfshihet, prandaj e zgjedh sipas projektit.
Si e shkallëzoj një backend FastAPI?
Horizontalisht: ekzekuton disa procese Uvicorn nën Gunicorn, pas një load balancer-i, me cache Redis dhe detyra të rënda të zhvendosura te Celery. Dizajni stateless lejon shtimin e instancave sipas nevojës.