Python og FastAPI bakendi — nútímalegt og skalanlegt API
FastAPI er leiðandi Python-rammi fyrir ósamstillt REST API. Hann sameinar innbyggðar type hints í Python við sjálfvirka Pydantic-staðfestingu, sjálfkrafa útbúin OpenAPI-skjöl og ASGI-afköst sambærileg við Node.js — án þess að fórna læsileika kóðans.
FastAPI — hraður Python-rammi
FastAPI keyrir á Uvicorn (ASGI-þjóni) með Gunicorn fyrir fjölferla keyrslu í framleiðslu. Einfaldur endapunktur sem les úr Redis-skyndiminni þarf ekki að sækja gögn í gagnagrunninn í hvert skipti. Innbyggð Dependency Injection gerir kleift að prófa hvaða lag sem er í einangrun án flókinna eftirlíkinga: auðkenning, gagnagrunnslota, hraðatakmörkun — hvert um sig er innsprautanleg háð eining.
OpenAPI 3.1-skjölin verða til sjálfkrafa úr type hints — Swagger UI og ReDoc eru aðgengileg á `/docs` og `/redoc` í þróun. Pydantic v2-skema (staðfestir skrifaður í Rust) staðfestir beiðnir og svör hraðar en Pydantic v1. Hvert ógilt svið skilar 422 með skýrum, staðfærðum villuskilaboðum.
- async/await innbyggt — óhindrað I/O í öllum gagnagrunns- og HTTP-aðgerðum
- BackgroundTasks fyrir aðgerðir eftir svar (tölvupóstur, webhook, skráning)
- Innbyggður WebSocket-stuðningur fyrir rauntímavirkni (spjall, tilkynningar)
- Hraðatakmörkun með slowapi (byggt á limits) — á hvert IP og hvern notanda
- Millihugbúnaður: CORS, þjöppun (gzip/brotli), request ID, tímamæling
PostgreSQL, SQLAlchemy og Alembic
Við notum SQLAlchemy 2.0 async (asyncpg-rekill) fyrir allar gagnagrunnsaðgerðir. Líkönin eru skilgreind með Mapped-tegundum — tegundaörugg, án strengja. Flóknar fyrirspurnir eru skrifaðar í SQLAlchemy Core (athugað við þýðingu) eða hreinu SQL með `text()` og bundnum breytum — aldrei strengjainnskot (full vörn gegn SQLi).
Alembic-yfirfærslur eru búnar til sjálfkrafa út frá breytingum á líkönum og yfirfarnar handvirkt áður en þær eru keyrðar. Hver yfirfærsla hefur `upgrade()` og `downgrade()` sem hafa verið prófuð. Í framleiðslu keyra yfirfærslur í CI fyrir útgáfu — gagnagrunnurinn er alltaf í samræmi við kóðann. Tengipúlun í gegnum asyncpg með stillanlegri púlstærð fyrir hverja þjónustu.
- Raðalæsing með `SELECT ... FOR UPDATE` fyrir mikilvægar samhliða aðgerðir
- Fulltextaleit með pg_trgm og tsvector — án Elasticsearch í einföldum tilvikum
- JSONB fyrir hálfskipulögð gögn með GIN-vísitölu
- Skipt töflur (partition tables) fyrir töflur með milljónum raða (annálar, atburðir)
Redis-skyndiminni og lárétt skölun
Redis 7 er notað fyrir skyndiminni forritsins (TTL fyrir hvern endapunkt), lotugeymslu (JWT refresh tokens með sértækri afturköllun), pub/sub fyrir rauntímaatburði og biðraðir fyrir bakgrunnsverk (Celery eða ARQ). Skyndiminnisaðferðin er cache-aside með skýrri ógildingu — ekki blint TTL sem getur borið fram úrelt gögn.
- JWT-auðkenning með access token (15 mín) + refresh token í Redis (7 dagar)
- Celery + Redis-miðlari fyrir ósamstillt verk (PDF-gerð, tölvupóstur, innflutningur)
- Heilsuskoðunarendapunktur `/health` með stöðu gagnagrunns, Redis og útgáfu
- Skipulögð JSON-skráning (structlog) — samhæf við Loki/Datadog/ELK
Kostir og takmarkanir
Kostir
- ASGI-afköst sambærileg við Node.js og Go í I/O.
- OpenAPI-skjöl búin til sjálfkrafa úr type hints.
- Hröð Pydantic v2-staðfesting með skýrum 422-villum.
- Læsilegur kóði, Python er flestum teymum kunnuglegt.
Takmarkanir
- Python er áfram hægara en Go eða Rust í örgjörvafrekum verkum.
- async/await krefst aga — eitt hindrandi kall stöðvar allt event loop.
- Yngra vistkerfi en Django fyrir innbyggða eiginleika.
- Inniheldur hvorki ORM né stjórnborð — þú velur þau sérstaklega.
Stutt niðurstaða
Veldu FastAPI fyrir ósamstillt REST API, örþjónustur og bakenda fyrir SPA/farsíma. Fyrir mjög örgjörvafrek forrit eða einlitar lausnir með tilbúnu stjórnborði geta Go og Django hentað betur.
Tækniforskriftir
| Geta | Takmörk / þröskuldur | Dæmigerð notkun | |
|---|---|---|---|
| Samhliða vinnsla | async/await, óhindrað I/O | Örgjörvafrek verk þurfa aðskilda vinnsluferla | API með mörgum gagnagrunns-/HTTP-köllum |
| Svartími | Redis-skyndiminni fyrir endurteknar fyrirspurnir | Eykst með raðgerð stórra gagnahlaða | SaaS-bakendi, farsímar, rauntími |
| Staðfesting & skjöl | Pydantic v2 + OpenAPI 3.1 sjálfvirkt | Flókin skema lengir ræsitíma | Opin API með Swagger/ReDoc |
| Dæmigerður kostnaður | Opinn hugbúnaður, keyrir á 1 vCPU | Lárétt skölun krefst fleiri ferla | Frá MVP til framleiðslu |
FastAPI samanborið við aðra kosti
| Viðmið | FastAPI | Django / Express |
|---|---|---|
| Ósamstillt afköst | Framúrskarandi (innbyggt ASGI) | Django að hluta, Express góð |
| Sjálfvirk OpenAPI-skjöl | Já, úr type hints | Krefst aukapakka |
| Innbyggt stjórnborð / ORM | Nei (þú velur sérstaklega) | Django: já; Express: nei |
Algengar spurningar
Er FastAPI hraðara en Django?
Já í I/O. FastAPI keyrir ósamstillt á ASGI og ræður því við mun fleiri samhliða beiðnir með gagnagrunns-/HTTP-köllum en klassískt samstillt Django. Django hefur hins vegar fleiri innbyggða eiginleika.
Hvað hentar FastAPI ekki fyrir?
Fyrir mjög örgjörvafrek verk (myndvinnsla, þung talnareikningur) er Python hægara en Go eða Rust; þau eru færð yfir á aðskilda vinnsluferla. Og hann kemur ekki með tilbúið stjórnborð eins og Django.
Þarf FastAPI ORM?
Ekki nauðsynlega. Við notum SQLAlchemy 2.0 async með Alembic fyrir yfirfærslur, en þú getur skrifað hreint SQL. ORM fylgir ekki með, svo þú velur það eftir verkefninu.
Hvernig skala ég FastAPI-bakenda?
Lárétt: þú keyrir fleiri Uvicorn-ferla undir Gunicorn, á bak við álagsjafnara, með Redis-skyndiminni og þung verk færð yfir á Celery. Ríkisfrjáls hönnun gerir kleift að bæta við tilvikum eftir þörfum.