Python & FastAPI Backend — müasir, miqyaslana bilən API-lər
FastAPI asinxron REST API-lər üçün istinad Python framework-üdür. Nativ Python tip göstərişlərini avtomatik Pydantic validasiyası, avtomatik yaradılan OpenAPI sənədləşməsi və Node.js ilə müqayisə oluna bilən ASGI performansı ilə birləşdirir — kodun oxunaqlılığını qurban vermədən.
FastAPI — ən sürətli Python framework-ü
FastAPI istehsalda çoxprosesli iş üçün Gunicorn ilə Uvicorn (ASGI server) üzərində işləyir. Redis keşindən oxuyan sadə endpoint standart avadanlıqda 5ms-dən qısa müddətdə cavab verir. Nativ Dependency Injection mürəkkəb mock-lar olmadan istənilən qatı təcrid edilmiş şəkildə test etməyə imkan verir: autentifikasiya, verilənlər bazası sessiyası, rate limiting — hər biri inyeksiya oluna bilən asılılıqdır.
OpenAPI 3.1 sənədləşməsi tip göstərişlərindən avtomatik yaradılır — Swagger UI və ReDoc inkişaf zamanı `/docs` və `/redoc` ünvanlarında mövcuddur. Pydantic v2 sxemi (Rust əsaslı validator) sorğu və cavabları Pydantic v1-dən 10–20 dəfə sürətli yoxlayır. Hər etibarsız sahə aydın, lokallaşdırılmış xəta mesajları ilə 422 qaytarır.
- Nativ async/await — bütün DB və HTTP əməliyyatlarında bloklamayan I/O
- Cavabdan sonrakı əməliyyatlar üçün BackgroundTasks (e-poçt, webhook, log)
- Real vaxt funksiyaları (çat, bildirişlər) üçün nativ WebSocket dəstəyi
- slowapi (limits əsaslı) ilə rate limiting — IP və istifadəçi üzrə
- CORS, sıxılma (gzip/brotli), request ID, timing middleware
PostgreSQL, SQLAlchemy və Alembic
Bütün DB əməliyyatları üçün SQLAlchemy 2.0 async (asyncpg drayveri) istifadə edirik. Modellər Mapped tipləri ilə təyin olunur — tip təhlükəsiz, sətirsiz. Mürəkkəb sorğular SQLAlchemy Core ilə (kompilyasiya zamanı yoxlanılır) və ya bind parametrləri ilə `text()` vasitəsilə təmiz SQL ilə yazılır — heç vaxt sətir interpolyasiyası ilə (SQLi-nin tam qarşısı alınır).
Alembic miqrasiyaları model dəyişikliklərindən avtomatik yaradılır və tətbiqdən əvvəl əl ilə yoxlanılır. Hər miqrasiyanın test edilmiş `upgrade()` və `downgrade()` funksiyaları var. İstehsalda miqrasiyalar deploy-dan əvvəl CI-də işləyir — verilənlər bazası həmişə kodla sinxrondur. Hər servis üçün tənzimlənən pool ölçüsü ilə asyncpg vasitəsilə connection pooling.
- Kritik paralel əməliyyatlar üçün `SELECT ... FOR UPDATE` ilə sətir səviyyəsində kilidləmə
- pg_trgm və tsvector ilə tam mətn axtarışı — sadə hallar üçün Elasticsearch olmadan
- GIN indeksləməsi ilə yarı strukturlaşdırılmış məlumatlar üçün JSONB
- Milyonlarla sətri olan cədvəllər (loglar, hadisələr) üçün cədvəl bölmələri
Redis keşləməsi və üfüqi miqyaslanma
Redis 7 tətbiq keşi (hər endpoint üçün TTL), session store (seçici ləğvetmə ilə JWT refresh tokenlər), real vaxt hadisələri üçün pub/sub və arxa plan işləri üçün növbələr (Celery və ya ARQ) üçün istifadə olunur. Keşləmə strategiyası açıq invalidasiya ilə cache-aside-dır — köhnəlmiş məlumat verə biləcək kor TTL deyil.
- Access token (15 dəq) + Redis refresh token (7 gün) ilə JWT autentifikasiyası
- Asinxron tapşırıqlar (PDF yaratma, e-poçt, import) üçün Celery + Redis broker
- DB, Redis statusu və deploy versiyası ilə `/health` health check endpoint-i
- Strukturlaşdırılmış JSON loglama (structlog) — Loki/Datadog/ELK ilə uyğun
Üstünlüklər və məhdudiyyətlər
Üstünlüklər
- I/O üzrə Node.js və Go ilə müqayisə oluna bilən ASGI performansı.
- Tip göstərişlərindən avtomatik yaradılan OpenAPI sənədləşməsi.
- Aydın 422 xətaları ilə sürətli Pydantic v2 validasiyası.
- Oxunaqlı kod, əksər komandaların tanış olduğu Python.
Məhdudiyyətlər
- CPU-intensiv tapşırıqlarda Python Go və ya Rust-dan yavaş qalır.
- async/await intizam tələb edir — bir bloklayıcı çağırış bütün event loop-u dayandırır.
- Hazır funksiyalar baxımından Django-dan daha gənc ekosistem.
- Daxili ORM və ya admin yoxdur — onları ayrıca seçirsiniz.
Qısa nəticə
Asinxron REST API-lər, mikroservislər və SPA/mobil üçün backend-lər üçün FastAPI seçin. Həddindən artıq CPU-yönümlü tətbiqlər və ya hazır admin-li monolitlər üçün müvafiq olaraq Go və ya Django daha uyğun ola bilər.
Spesifikasiyalar cədvəli
| Imkan | Limit / hədd | Tipik istifadə | |
|---|---|---|---|
| Paralellik | async/await, bloklamayan I/O | CPU-yönümlü işlər ayrıca worker tələb edir | Çoxlu DB/HTTP çağırışlı API-lər |
| Gecikmə | Redis keşi ilə hər endpoint üçün < 5ms | Böyük payload serializasiyası ilə artır | SaaS, mobil, real vaxt backend |
| Validasiya və sənədlər | Pydantic v2 + avtomatik OpenAPI 3.1 | Mürəkkəb sxemlər başlanğıc vaxtını artırır | Swagger/ReDoc ilə ictimai API-lər |
| Tipik xərc | Açıq mənbə, 1 vCPU üzərində işləyir | Üfüqi miqyaslama daha çox proses tələb edir | MVP-dən istehsalatadək |
FastAPI və alternativlər
| Meyar | FastAPI | Django / Express |
|---|---|---|
| Asinxron performans | Əla (nativ ASGI) | Django qismən, Express yaxşı |
| Avtomatik OpenAPI sənədləri | Bəli, tip göstərişlərindən | Əlavə paketlər tələb edir |
| Daxili admin / ORM | Xeyr (ayrıca seçilir) | Django: bəli; Express: xeyr |
Tez-tez verilən suallar
FastAPI Django-dan sürətlidir?
I/O üçün bəli. FastAPI ASGI üzərində asinxron işləyir, ona görə DB/HTTP çağırışları olan eyni vaxtda çox daha çox sorğunu klassik sinxron Django-dan yaxşı idarə edir. Lakin Django-nun daha çox daxili funksiyası var.
FastAPI nə üçün uyğun deyil?
Ağır CPU-yönümlü tapşırıqlar (şəkil emalı, ağır ədədi hesablamalar) üçün Python Go və ya Rust-dan yavaşdır; onları ayrıca worker-lərə keçirirsiniz. Həmçinin Django kimi hazır admin yoxdur.
FastAPI-yə ORM lazımdır?
Məcburi deyil. Biz miqrasiyalar üçün Alembic ilə SQLAlchemy 2.0 async istifadə edirik, lakin təmiz SQL də yaza bilərsiniz. ORM paketə daxil deyil, ona görə onu layihə üzrə seçirsiniz.
FastAPI backend-ini necə miqyaslandırmaq olar?
Üfüqi şəkildə: load balancer arxasında Gunicorn altında bir neçə Uvicorn prosesi işlədin, Redis keşi ilə və ağır tapşırıqları Celery-yə keçirməklə. Stateless dizayn tələbə görə instansiyalar əlavə etməyə imkan verir.