Technologijos

← Pradžia
Backend ir API

Python & FastAPI backend — šiuolaikiniai ir keičiamo mastelio API

FastAPI – pagrindinis Python karkasas asinchroniniams REST API. Jis derina natūralius Python type hints su automatine Pydantic validacija, automatiškai generuojama OpenAPI dokumentacija ir ASGI našumu, panašiu į Node.js, – neaukojant kodo skaitomumo.

FastAPI – greitas Python karkasas

FastAPI veikia ant Uvicorn (ASGI serverio), o produkcijoje daugiaprocesiškumui naudojamas Gunicorn. Paprastas endpoint, skaitantis iš Redis talpyklos, standartinėje aparatinėje įrangoje atsako per mažiau nei 5 ms. Natūralus Dependency Injection leidžia izoliuotai testuoti bet kurį sluoksnį be sudėtingų mock’ų: autentifikacija, duomenų bazės sesija, užklausų ribojimas – kiekvienas jų yra injektuojama priklausomybė.

OpenAPI 3.1 dokumentacija generuojama automatiškai iš type hints – Swagger UI ir ReDoc kūrimo aplinkoje pasiekiami adresais `/docs` ir `/redoc`. Pydantic v2 schema (validatorius, parašytas Rust) tikrina užklausas ir atsakymus 10–20 kartų greičiau nei Pydantic v1. Bet kuris netinkamas laukas grąžina 422 su aiškiais, lokalizuotais klaidų pranešimais.

  • Natūralus async/await – neblokuojantis I/O visoms DB ir HTTP operacijoms
  • BackgroundTasks operacijoms po atsakymo (el. paštas, webhook, žurnalas)
  • Natūrali WebSocket parama realaus laiko funkcijoms (pokalbiai, pranešimai)
  • Užklausų ribojimas su slowapi (paremtas limits) – pagal IP ir pagal naudotoją
  • Middleware: CORS, suspaudimas (gzip/brotli), request ID, laiko matavimas

PostgreSQL, SQLAlchemy ir Alembic

Visoms DB operacijoms naudojame SQLAlchemy 2.0 async (asyncpg tvarkyklė). Modeliai apibrėžiami su Mapped tipais – tipų saugūs, be eilučių. Sudėtingos užklausos rašomos SQLAlchemy Core (tikrinamos kompiliavimo metu) arba gryname SQL per `text()` su bind parametrais – niekada nenaudojant eilučių interpoliacijos (visiška SQLi prevencija).

Alembic migracijos generuojamos automatiškai iš modelių pakeitimų ir prieš taikymą peržiūrimos rankiniu būdu. Kiekviena migracija turi ištestuotus `upgrade()` ir `downgrade()`. Produkcijoje migracijos vykdomos CI prieš diegimą – duomenų bazė visada sinchronizuota su kodu. Jungčių telkimas per asyncpg su konfigūruojamu telkinio dydžiu kiekvienai paslaugai.

  • Eilučių lygio užraktai su `SELECT ... FOR UPDATE` kritinėms lygiagrečioms operacijoms
  • Pilnatekstė paieška su pg_trgm ir tsvector – be Elasticsearch paprastiems atvejams
  • JSONB pusiau struktūrizuotiems duomenims su GIN indeksavimu
  • Skaidytos lentelės (partition) lentelėms su milijonais eilučių (žurnalai, įvykiai)

Redis talpykla ir horizontalus mastelio didinimas

Redis 7 naudojamas programos talpyklai (TTL kiekvienam endpoint), sesijų saugyklai (JWT refresh tokenai su selektyviu atšaukimu), pub/sub realaus laiko įvykiams ir eilėms foninėms užduotims (Celery arba ARQ). Talpyklos strategija – cache-aside su aiškiu invalidavimu, o ne aklas TTL, kuris gali pateikti pasenusius duomenis.

  • JWT autentifikacija su access tokenu (15 min.) + Redis refresh tokenu (7 dienos)
  • Celery + Redis brokeris asinchroninėms užduotims (PDF generavimas, el. paštas, importai)
  • Sveikatos patikros endpoint `/health` su DB, Redis būsena ir diegimo versija
  • Struktūrizuotas JSON žurnalas (structlog) – suderinamas su Loki/Datadog/ELK

Privalumai ir apribojimai

Privalumai

  • ASGI našumas, panašus į Node.js ir Go I/O užduotyse.
  • OpenAPI dokumentacija generuojama automatiškai iš type hints.
  • Greita Pydantic v2 validacija su aiškiomis 422 klaidomis.
  • Skaitomas kodas, daugumai komandų pažįstamas Python.

Apribojimai

  • Python išlieka lėtesnis nei Go ar Rust daug procesoriaus reikalaujančiose užduotyse.
  • async/await reikalauja drausmės – vienas blokuojantis iškvietimas užblokuoja visą event loop.
  • Jaunesnė ekosistema nei Django funkcijoms „viskas įskaičiuota“.
  • Neturi įtaisyto ORM ar admin – juos renkiesi atskirai.

Trumpa išvada

Rinkitės FastAPI asinchroniniams REST API, mikropaslaugoms ir SPA/mobiliųjų programų backend’ams. Itin daug procesoriaus reikalaujančioms programoms ar monolitams su paruošta admin pasirinkimas gali būti atitinkamai Go arba Django.

Specifikacijų lentelė

GalimybėRiba / slenkstisTipinis naudojimas
Lygiagretumasasync/await, neblokuojantis I/ODaug procesoriaus reikalaujančioms užduotims reikia atskirų worker’iųAPI su daug DB/HTTP kreipinių
Delsa< 5 ms endpoint su Redis talpyklaDidėja serializuojant dideles apkrovasSaaS, mobiliųjų programų ir realaus laiko backend
Validacija ir dokumentaiPydantic v2 + automatinė OpenAPI 3.1Sudėtinga schema pailgina paleidimo laikąViešieji API su Swagger/ReDoc
Tipinė kainaAtvirasis kodas, veikia su 1 vCPUHorizontaliam didinimui reikia daugiau procesųNuo MVP iki produkcijos

FastAPI ir alternatyvos

KriterijusFastAPIDjango / Express
Asinchroninis našumasPuikus (natūralus ASGI)Django iš dalies, Express geras
Automatinė OpenAPI dokumentacijaTaip, iš type hintsReikia papildomų paketų
Įtaisyta admin / ORMNe (renkiesi atskirai)Django: taip; Express: ne

Dažniausiai užduodami klausimai

Ar FastAPI greitesnis už Django?

Taip, I/O užduotyse. FastAPI veikia asinchroniškai ant ASGI, todėl su DB/HTTP kreipiniais apdoroja daug daugiau lygiagrečių užklausų nei klasikinis sinchroninis Django. Tačiau Django turi daugiau įtaisytų funkcijų.

Kam FastAPI netinka?

Itin daug procesoriaus reikalaujančioms užduotims (vaizdų apdorojimas, sudėtingi skaitiniai skaičiavimai) Python lėtesnis už Go ar Rust; jas perkeli į atskirus worker’ius. Be to, jis neturi paruoštos admin, kaip Django.

Ar FastAPI reikia ORM?

Nebūtinai. Naudojame SQLAlchemy 2.0 async su Alembic migracijoms, bet gali rašyti ir gryną SQL. ORM neįtrauktas, todėl jį renkiesi pagal projektą.

Kaip keisti FastAPI backend’o mastelį?

Horizontaliai: paleidi kelis Uvicorn procesus po Gunicorn, už apkrovos balansuotojo, su Redis talpykla ir sunkiomis užduotimis, perkeltomis į Celery. Be būsenos (stateless) architektūra leidžia prireikus pridėti instancijų.

4b2b.net
Verslo ekosistema
4conta.ro
Buhalterinė apskaita
4invoices.net
Sąskaitų išrašymo programa
4expenses.net
Išlaidų valdymas
4notify.net
Pranešimai
4hosting.net
Svetainių talpinimas
4database.net
Duomenų bazės
4buildsite.net
Svetainių kūrimas
4myapp.net
Programėlių kūrimas
4avatars.net
DI avatarai
4chaty.net
DI pokalbių robotas
4webagency.net
Programa interneto agentūroms
4softedu.net
Svetainės švietimui
4softcrm.net
CRM platforma
4softerp.net
ERP sistema
4softhr.net
Personalo valdymas
4mystaff.net
Darbuotojų portalas
4myprojects.net
Projektų valdymas
4mycontracts.net
Sutartys
4docs.net
Dokumentų valdymas
4appointments.net
Vizitų registracija
4marketingonline.net
Rinkodara
4insurance.net
Draudimas
4property.net
Nekilnojamasis turtas
4lawyers.net
Programa advokatams
4mygarage.net
Autoservisas
4driving.net
Vairavimo mokyklos
4fleet.net
Autoparko valdymas
4myevents.net
Renginiai
4therapy.net
Terapija
4clinics.net
Klinikos
4dental.net
Odontologijos klinikos
4restaurants.net
Restoranai
4beautify.net
Grožio salonas
4gym.net
Sporto klubai
4guards.net
Apsaugos įmonės
4softvet.net
Veterinarijos klinikos
4softauto.net
Programinė įranga automobilių verslui
4construct.net
Statybos įmonės
4marketplace.net
Prekyvietė
4shopy.net
El. parduotuvė
4pricing.net
Kainų palyginimas
4salefood.net
Maisto pristatymas
4rentify.net
Nuoma
4transports.net
Transportas
4agencytravel.net
Kelionių agentūra
4hotel.net
Viešbučių valdymas
4ong.net
NVO valdymas