Tehnoloogiad

← Avaleht
Taustasüsteem ja API

Python- ja FastAPI-taustasüsteem — kaasaegsed ja skaleeritavad API-d

FastAPI on Pythoni võrdlusraamistik asünkroonsete REST API-de jaoks. See ühendab Pythoni natiivsed type hints'id Pydanticu automaatse valideerimise, automaatselt genereeritud OpenAPI-dokumentatsiooni ja Node.js-iga võrreldava ASGI-jõudlusega — ohverdamata koodi loetavust.

FastAPI — kiireim Pythoni raamistik

FastAPI töötab Uvicorni (ASGI-server) peal ning tootmises Gunicorniga mitme protsessi jaoks. Natiivne Dependency Injection võimaldab mis tahes kihti isoleeritult testida ilma keerukate mock'ideta: autentimine, andmebaasisessioon, rate limiting — kõik on süstitav sõltuvus.

OpenAPI 3.1 dokumentatsioon genereeritakse automaatselt type hints'idest — Swagger UI ja ReDoc on arenduses saadaval aadressidel `/docs` ja `/redoc`. Pydantic v2 skeem (Rustil põhinev validaator) valideerib päringuid ja vastuseid 10–20 korda kiiremini kui Pydantic v1. Iga kehtetu väli tagastab 422 selgete, lokaliseeritud veateadetega.

  • Natiivne async/await — mitteblokeeriv I/O kõigil andmebaasi- ja HTTP-operatsioonidel
  • BackgroundTasks vastusejärgsete operatsioonide jaoks (e-post, webhook, logi)
  • Natiivne WebSocket-tugi reaalajafunktsioonide jaoks (vestlus, teavitused)
  • Rate limiting slowapi abil (põhineb teegil limits) — IP- ja kasutajapõhiselt
  • Middleware CORS, tihendamine (gzip/brotli), request ID, ajamõõtmine

PostgreSQL, SQLAlchemy ja Alembic

Kõigi andmebaasioperatsioonide jaoks kasutame SQLAlchemy 2.0 async (asyncpg-draiver). Mudelid on defineeritud Mapped-tüüpidega — tüübikindlad, ilma stringideta. Keerukad päringud kirjutatakse SQLAlchemy Core'iga (kompileerimisajal kontrollitud) või puhta SQL-iga `text()` kaudu bind-parameetritega — mitte kunagi string interpolation'iga (täielik SQLi ennetus).

Alembicu migratsioonid genereeritakse automaatselt mudelimuudatustest ja vaadatakse enne rakendamist käsitsi üle. Igal migratsioonil on testitud `upgrade()` ja `downgrade()`. Tootmises käivituvad migratsioonid CI-s enne juurutust — andmebaas on alati koodiga sünkroonis. Connection pooling asyncpg kaudu, pooli suurus on teenuse kaupa seadistatav.

  • Row-level locking käsuga `SELECT ... FOR UPDATE` kriitiliste samaaegsete operatsioonide jaoks
  • Täistekstiotsing pg_trgm ja tsvectoriga — lihtsatel juhtudel ilma Elasticsearchita
  • JSONB poolstruktureeritud andmete jaoks GIN-indekseerimisega
  • Partition tables miljonite ridadega tabelite jaoks (logid, sündmused)

Redise vahemälu ja horisontaalne skaleeritavus

Redis 7 on kasutusel rakenduse vahemälu (TTL lõpp-punkti kaupa), sessioonisalvestuse (JWT refresh tokenid selektiivse tühistamisega), reaalajasündmuste pub/sub'i ja taustatööde järjekordade (Celery või ARQ) jaoks. Vahemälustrateegia on cache-aside selge kehtetuks tunnistamisega — mitte pime TTL, mis võib serveerida aegunud andmeid.

  • JWT-autentimine access tokeniga (15 min) + Redise refresh tokeniga (7 päeva)
  • Celery + Redise broker asünkroonsete ülesannete jaoks (PDF-i genereerimine, e-post, impordid)
  • Tervisekontrolli lõpp-punkt `/health` andmebaasi, Redise ja juurutuse versiooni staatusega
  • Struktureeritud JSON-logimine (structlog) — ühilduv Loki/Datadog/ELK-ga

Eelised ja piirangud

Eelised

  • ASGI-jõudlus, mis on I/O-l võrreldav Node.js-i ja Go-ga.
  • Type hints'idest automaatselt genereeritud OpenAPI-dokumentatsioon.
  • Kiire Pydantic v2 valideerimine selgete 422-vigadega.
  • Loetav kood, Python on enamikule meeskondadest tuttav.

Piirangud

  • Python on protsessorimahukates ülesannetes endiselt aeglasem kui Go või Rust.
  • async/await nõuab distsipliini — üks blokeeriv kutse blokeerib kogu event loop'i.
  • Noorem ökosüsteem kui Djangol sisseehitatud funktsioonide poolest.
  • Ei sisalda sisseehitatud ORM-i ega adminit — need valid eraldi.

Lühike kokkuvõte

Vali FastAPI asünkroonsete REST API-de, mikroteenuste ning SPA- ja mobiilirakenduste taustasüsteemide jaoks. Äärmiselt protsessoripiiratud rakenduste või valmis adminiga monoliitide jaoks võivad sobivamad olla vastavalt Go ja Django.

Spetsifikatsioonide tabel

VõimekusPiir / läviTüüpiline kasutus
Samaaegsusasync/await, mitteblokeeriv I/OProtsessoripiiratud töö vajab eraldi worker'eidAPI-d paljude andmebaasi-/HTTP-kutsetega
LatentsusLõpp-punkt Redise vahemälugaKasvab suurte payload'ide serialiseerimisegaSaaS-i taustasüsteem, mobiil, reaalaeg
Valideerimine ja dokumentatsioonPydantic v2 + automaatne OpenAPI 3.1Keerukas skeem pikendab käivitusaegaAvalikud API-d Swagger/ReDociga
Tüüpiline hindAvatud lähtekood, töötab 1 vCPU-lHorisontaalne skaleerimine nõuab rohkem protsesseMVP-st tootmiseni

FastAPI vs alternatiivid

KriteeriumFastAPIDjango / Express
Asünkroonne jõudlusSuurepärane (natiivne ASGI)Django osaliselt, Express hea
Automaatne OpenAPI-dokumentatsioonJah, type hints'idestVajab lisapakette
Sisseehitatud admin / ORMEi (valid eraldi)Django: jah; Express: ei

Korduma kippuvad küsimused

Kas FastAPI on Djangost kiirem?

Jah, I/O-s. FastAPI töötab asünkroonselt ASGI peal, seega haldab andmebaasi-/HTTP-kutsetega palju rohkem samaaegseid päringuid kui klassikaline sünkroonne Django. Djangol on aga rohkem sisseehitatud funktsioone.

Milleks FastAPI ei sobi?

Protsessorimahukate ülesannete (pilditöötlus, raske numbriline arvutus) jaoks on Python aeglasem kui Go või Rust; need viid üle eraldi worker'itele. Samuti ei tule sellega kaasa valmis admin nagu Djangol.

Kas FastAPI vajab ORM-i?

Mitte tingimata. Kasutame SQLAlchemy 2.0 async'i koos Alembicuga migratsioonide jaoks, aga võid kirjutada ka puhast SQL-i. ORM-i kaasas ei ole, seega valid selle projekti järgi.

Kuidas FastAPI taustasüsteemi skaleerida?

Horisontaalselt: käivitad mitu Uvicorni protsessi Gunicorni all, koormusjaoturi taga, Redise vahemälu ja Celerysse viidud raskete ülesannetega. Olekuvaba disain võimaldab vajadusel instantse juurde lisada.

4b2b.net
Äriökosüsteem
4conta.ro
Raamatupidamine
4invoices.net
Arvelduse rakendus
4expenses.net
Kulude haldus
4notify.net
Teavitused
4hosting.net
Veebimajutus
4database.net
Andmebaasid
4buildsite.net
Kodulehe koostaja
4myapp.net
Rakenduste koostaja
4avatars.net
Tehisintellekti avatarid
4chaty.net
Tehisintellekti vestlusrobot
4webagency.net
Tarkvara veebiagentuuridele
4softedu.net
Kodulehed hariduse jaoks
4softcrm.net
CRM-platvorm
4softerp.net
ERP-süsteem
4softhr.net
Personalijuhtimine
4mystaff.net
Töötajate portaal
4myprojects.net
Projektijuhtimine
4mycontracts.net
Lepingud
4docs.net
Dokumendihaldus
4appointments.net
Broneeringud
4marketingonline.net
Turundus
4insurance.net
Kindlustus
4property.net
Kinnisvara
4lawyers.net
Tarkvara juristidele
4mygarage.net
Autoteenindus
4driving.net
Autokoolid
4fleet.net
Autopargi haldus
4myevents.net
Üritused
4therapy.net
Teraapia
4clinics.net
Kliinikud
4dental.net
Hambakliinikud
4restaurants.net
Restoranid
4beautify.net
Ilusalong
4gym.net
Spordiklubid
4guards.net
Turvafirmad
4softvet.net
Loomakliinikud
4softauto.net
Autoäri tarkvara
4construct.net
Ehitusettevõtted
4marketplace.net
Kauplemisplatvorm
4shopy.net
E-pood
4pricing.net
Hinnavõrdlus
4salefood.net
Toidu kohaletoimetamine
4rentify.net
Üürileandmine
4transports.net
Transport
4agencytravel.net
Reisibüroo
4hotel.net
Hotellihaldus
4ong.net
MTÜ-de haldus