- Birajte između rasporeda zasnovanih na tipovima datoteka i rasporeda zasnovanih na funkcijama na osnovu veličine projekta, arhitekture i potreba tima, pri čemu dosljednost treba biti glavni prioritet.
- Iskoristite FastAPI-jeve tipove savjeta, Pydantic modele i ubrizgavanje zavisnosti kako biste rutiranje održali tankim, logiku modularnom, a validaciju snažnom i ponovo upotrebljivom.
- Strukturirajte sigurnost, testiranje, asinhroni ulazno/izlazni sistem i konfiguraciju kao prioritetne brige tako da skaliranje na produkciju i više timova ne zahtijeva potpuno prepisivanje.
- Usvojite jasne konvencije imenovanja, migracije i alata kako biste održali održivost rastuće monolitne ili mikroservisne flote FastAPI-ja tokom vremena.
Dizajniranje čiste, skalabilne strukture za FastAPI projekat je jedna od onih odluka koje na početku izgledaju beznačajne, ali šest mjeseci kasnije potpuno mijenjaju vaš život., kada je kodna baza porasla, tim se proširio i pokušavate pratiti grešku u više modula. Dobar raspored ubrzava uvođenje u sistem, smanjuje regresije i čini refaktorisanje mnogo manje bolnim.
FastAPI vam pruža ogromnu fleksibilnost, ali to također znači da morate aktivno birati i provoditi konvencije.U ovom vodiču ćemo prikupiti najkorisnije ideje iz stvarnog svijeta, produkcijskih FastAPI projekata i dobro poznatih repozitorija najboljih praksi, uporediti glavne rasporede projekata i vidjeti kako oni djeluju s osnovnim FastAPI konceptima kao što su ubrizgavanje zavisnosti, validacija, asinhroni I/O, testiranje i implementacija.
Zašto je struktura projekta toliko važna u FastAPI-ju
Čvrsta struktura je osnova koja održava FastAPI aplikaciju razumljivom kako raste u veličini i složenosti.Bez toga, čak i framework sa odličnom ergonomijom brzo se pretvara u gomilu ad-hoc modula, kružnog uvoza i duplirane logike.
Sa inženjerske perspektive, struktura direktno utiče na skalabilnostKada su moduli odvojeni i odgovornosti jasne, možete podijeliti servise, uvesti redove čekanja ili skalirati različite dijelove sistema nezavisno bez prepisivanja svega.
Održavanje je još jedna velika pobjedaKada svaka ruta, shema i model baze podataka imaju predvidljiv dom, programeri gube manje vremena na pretraživanje datoteka, a više vremena na rješavanje stvarnih poslovnih problema. Također postaje lakše obavljati preglede koda jer svi dijele isti mentalni model.
Na timskim projektima, konzistentan raspored značajno poboljšava saradnjuNovi zaposlenici mogu pretpostaviti gdje treba smjestiti nove funkcije, QA može otkriti prave ulazne tačke za testiranje, a DevOps može razumjeti koji su dijelovi ključni za pokretanje aplikacije (na primjer, gdje se nalazi ASGI objekt aplikacije i kako je baza podataka povezana).

Osnovni principi za strukturiranje FastAPI projekata
Prije odabira rasporeda mapa, korisno je dogovoriti se o nekoliko principa koji bi trebali voditi svaku arhitektonsku odluku.Ove ideje se više puta pojavljuju u uspješnim FastAPI kodnim bazama.
Razdvajanje briga je prvi stub: držati usmjeravanje, perzistenciju, poslovna pravila i integracijski kod na različitim mjestima. Krajnje tačke trebaju orkestrirati slučajeve upotrebe, a ne ugrađivati SQL upite, manipulaciju JSON-om i pozive vanjskih servisa, sve u jednoj dugoj funkciji.
Modularnost je drugi stubUmjesto jednog ogromnog monolitnog paketa, ciljajte na manje, fokusirane module ili podpakete koji obuhvataju povezano ponašanje. Ovo znatno olakšava ponovnu upotrebu dijelova, testiranje u izolaciji i na kraju njihovo dijeljenje u mikroservise ako je potrebno.
Ubrizgavanje zavisnosti je ljepilo koje povezuje te module bez čvrstog spajanja.Sistem zavisnosti FastAPI-ja vam omogućava da deklarišete šta ruta ili servis trebaju (sesija baze podataka, konfiguracija, autentifikovani korisnik, itd.) i da pustite da framework to obezbijedi, što je idealno za testiranje i ponovnu upotrebu.
Sama mogućnost testiranja mora se tretirati kao prvorazredni zahtjevAko struktura otežava pokretanje aplikacije u memoriji, prepisivanje zavisnosti i pogađanje krajnjih tačaka testnim klijentom, ili ćete preskočiti testove ili se boriti protiv vlastite arhitekture. Dobra struktura održava nuspojave lokalnim, a putanje uvezene iz testova.
Dva dominantna rasporeda FastAPI projekta: po tipu datoteke vs po funkciji
U FastAPI ekosistemu obično ćete pronaći dvije jasne porodice rasporeda.: projekti organizirani po vrsti datoteke (ruteri, modeli, sheme, CRUD) i projekti organizirani po domenu ili funkciji (autorizacija, korisnici, objave, plaćanja, itd.). Svaki od njih se ističe u drugačijem kontekstu.
Struktura zasnovana na tipu datoteke (ruteri, sheme, modeli, CRUD)
Pristup tipa datoteke odražava način na koji mnogi službeni primjeri i tutorijali uvode FastAPI.Kod grupišete prema njegovoj tehničkoj ulozi: sloj usmjeravanja, pidantske sheme, modeli baza podataka, CRUD operacije, uslužni programi i tako dalje.
Minimalan, ali realističan raspored mogao bi izgledati ovako (skraćeno radi jasnoće):
Primjer rasporeda: .├── app
│ ├── __init__.py
│ ├── main.py # FastAPI app initialization
│ ├── dependencies.py # shared dependencies
│ ├── routers
│ │ ├── __init__.py
│ │ ├── items.py # endpoints for items
│ │ └── users.py # endpoints for users
│ ├── crud
│ │ ├── item.py # item CRUD
│ │ └── user.py # user CRUD
│ ├── schemas
│ │ ├── item.py # pydantic models for items
│ │ └── user.py # pydantic models for users
│ ├── models
│ │ ├── item.py # ORM models for items
│ │ └── user.py # ORM models for users
│ ├── external_services
│ │ ├── email.py # email provider client
│ │ └── notification.py # push / notification client
│ └── utils
│ ├── authentication.py
│ └── validation.py
├── tests
│ ├── test_main.py
│ ├── test_items.py
│ └── test_users.py
├── requirements.txt
└── README.md
U ovom stilu, svaki direktorij najvišeg nivoa ispod app/ ima jednu odgovornost. Na primjer, routers/ opisuje HTTP ulazne tačke, schemas/ deklariše ulazno/izlazne oblike i models/ predstavljaju tabele baze podataka.
Ovaj raspored obično izuzetno dobro funkcioniše za male i srednje servise ili mikroservise.Domen je obično dovoljno uzak da podjela po tehničkim ulogama ne stvara trenje. Većina krajnjih tačaka koristi isti ograničeni skup modela, a samo nekoliko timova istovremeno radi na kodu.
Ključne prednosti strukture tipa datoteke uključuju vrlo nisko kognitivno opterećenje za početnike. i stablo direktorija koje blisko prati dokumentaciju FastAPI-ja. Za nekoga ko uči okvir, vidjeti namjenski routers/ mapa i schemas/ Korištenje mape često djeluje intuitivnije nego direktno prelazak na pakiranje vođeno domenom.
Struktura orijentirana na funkcije ili module pod src/
Kako projekti prerastaju u monolite s mnogim domenima, raspored tipova datoteka počinje da škripi.Dobijate ogromne direktorijume kao što su routers/ sa desetinama datoteka, složenim uvozom između modula i poslovnom logikom raspršenom po nepovezanim paketima.
Alternativa koja se bolje skalira je struktura zasnovana na karakteristikama ili vođena domenomOvdje smještate sav kod za određenu domenu u jedan podpaket: rute, sheme, modele, usluge, konfiguraciju i izuzetke specifične za module.
Reprezentativni raspored inspirisan popularnim repozitorijima najbolje prakse izgleda ovako:
Reprezentativno stablo datoteka: fastapi-project
├── alembic/
├── src
│ ├── auth
│ │ ├── router.py # auth endpoints
│ │ ├── schemas.py # pydantic models
│ │ ├── models.py # DB models
│ │ ├── dependencies.py # auth-specific dependencies
│ │ ├── config.py # local configs
│ │ ├── constants.py # auth error codes / constants
│ │ ├── exceptions.py # auth-specific exceptions
│ │ ├── service.py # business logic
│ │ └── utils.py # helpers
│ ├── aws
│ │ ├── client.py
│ │ ├── schemas.py
│ │ ├── config.py
│ │ ├── constants.py
│ │ ├── exceptions.py
│ │ └── utils.py
│ ├── posts
│ │ ├── router.py
│ │ ├── schemas.py
│ │ ├── models.py
│ │ ├── dependencies.py
│ │ ├── constants.py
│ │ ├── exceptions.py
│ │ ├── service.py
│ │ └── utils.py
│ ├── config.py # global configs
│ ├── models.py # shared DB models
│ ├── exceptions.py # shared exceptions
│ ├── pagination.py # reusable pagination logic
│ ├── database.py # DB connection & session management
│ └── main.py # FastAPI app factory / entry point
├── tests
│ ├── auth
│ ├── aws
│ └── posts
├── templates
│ └── index.html
├── requirements
│ ├── base.txt
│ ├── dev.txt
│ └── prod.txt
├── .env
├── logging.ini
└── alembic.ini
U ovom svijetu, src/ je vrh internog stabla aplikacijeSvaka domena, kao što je auth or posts, postaje gotovo mini servis: nosi vlastiti ruter, sheme, modele, konstante, tipove grešaka i sloj poslovnog servisa.
Glavna prednost je lokalnost promjene: kada dodate novu funkciju u posts, rijetko morate dirati bilo koji nepovezani paket. Testovi također mogu postojati uz svoje funkcije (na primjer pod tests/posts/), što podstiče veću pokrivenost.
Ova struktura je posebno pogodna za monolitne aplikacije s mnogo domena i timova, gdje želite podržati paralelni rad i smanjiti konflikte spajanja. Također se dobro uklapa s konceptima dizajna vođenim domenom poput ograničenih konteksta i agregata.

Odabir pravog izgleda za vaš FastAPI projekat
Izbor između tipa datoteke i strukture zasnovane na funkcijama nije stvar ispravnog ili pogrešnog, već usklađivanja vaše arhitekture i očekivanja rasta.Sitni interni alat sa samo nekoliko krajnjih tačaka neće imati mnogo koristi od složenog rasporeda domene.
Za mikroservise i usko ograničene API-je, raspored tipova datoteka je obično jednostavniji.Svaka usluga se često fokusira na jednu odgovornost (API za naplatu, pošiljatelj obavještenja, mikroservis za izvještavanje), a programeri već intuitivno znaju gdje postaviti nove rute ili sheme.
Za veće monolite, dijeljenje po domenima gotovo uvijek pobjeđuje na duge staze.Kada imate module za profile, pretplate, sadržaj, plaćanja, analitiku i još mnogo toga, stavljanje svakog rutera pod jedan direktorij postaje haotično. Grupiranje po karakteristikama održava svaki dio sistema samostalnim.
Također, razmislite o strukturi vašeg timaAko jedan mali tim posjeduje cijelu kodnu bazu, konzistentnost može biti lakše održavati jednostavnim rasporedom. Ako više timova dijeli monolit i svaki posjeduje područje domene, struktura zasnovana na funkcijama im omogućava brže kretanje bez gaženja jedni drugima na žulj.
Šta god da odaberete, konzistentnost je važnija od tačnog oblika drveta.Promjena izgleda usred projekta je bolna, tako da će se ulaganje malo razmišljanja na početku i pisanje kratkog internog vodiča za stil isplatiti kasnije.
Razumijevanje samog FastAPI-ja: šta strukturirate
Da biste dizajnirali razumnu strukturu, potreban vam je jasan mentalni model onoga što FastAPI zapravo radi za vas.U svojoj suštini, FastAPI je ASGI web framework fokusiran na izgradnju HTTP API-ja s Pythonom 3.7+ koristeći tipove nagovještaja.
FastAPI se uveliko oslanja na Pydantic za validaciju podataka i serijalizacijuNudi mnogo više od jednostavnih polja „obavezno naspram opcionalnih“; možete izraziti bogata ograničenja i transformacije direktno na svojim modelima.
Budući da je OpenAPI shema izvedena direktno iz vaših krajnjih tačaka i modela, FastAPI također generira interaktivnu dokumentaciju.Odmah nakon instalacije dobijate Swagger korisnički interfejs. /docs i ReDoc na /redoc, koji su neprocjenjivi prilikom saradnje s frontend developerima ili nezavisnim integratorima.
Ispod haube, FastAPI radi na ASGI serverima kao što je Uvicorn.Ovo omogućava vašoj aplikaciji da efikasno obrađuje mnogo istovremenih veza i omogućava funkcije poput dugotrajnih WebSocket veza bez dodatnih ceremonija.
FastAPI je također eksplicitan u pogledu zahtjeva i odgovoraSvaka krajnja tačka je samo obična Python funkcija (sync ili async) ukrašena sa @app.get, @app.post i prijatelji, primajući podatke o putanji/upitu/tijelu i vraćajući odgovor, obično dict ili Pydantic model.
Asinhrono naspram sinhronizacije: kako se performanse preklapaju sa strukturom
FastAPI je prvenstveno dizajniran kao asinhroni okvir, ali podržava i asinhrone i sinhrone krajnje tačke.Razumijevanje njihovog internog ponašanja će vam pomoći da dizajnirate usluge, birate klijente i strukturirate module koji obrađuju ulazno/izlazne podatke.
Kada proglasite async def rutu, FastAPI je pokreće direktno u petlji događajaOkvir pretpostavlja da će sve dugotrajne operacije unutar biti neblokirajući awaitable-ovi, kao što je asinhronizirani drajver baze podataka ili HTTP klijent izgrađen na asyncio.
Ako slučajno uputite blokirajuće pozive (na primjer time.sleep(), petlje koje zahtijevaju puno procesora ili spore biblioteke koje sinhrono obavljaju mrežni I/O) unutar tih asinhronih ruta, efektivno ćete zamrznuti petlju događajaNijedan drugi zahtjev neće biti obrađen dok se ta operacija ne završi, što poništava svrhu asinhronosti.
Rute sinhronizacije se ponašaju drugačije: FastAPI ih izvršava u skupu nitiBlokiranje rada u tim rutama zadržava samo radni thread, a ne cijelu petlju događaja, tako da server i dalje može prihvatati nove zahtjeve. Na ovaj način FastAPI ostaje fleksibilan kada se morate osloniti na sinhrone biblioteke.
Isti principi važe i za zavisnostiPodržane su i sinhronizacijske i asinhrone zavisnosti, ali sinhronizacijske zavisnosti se također izvršavaju u skupu niti. Za male ne-I/O pomagače često je bolje označiti ih kao asinhrone kako bi se izbjeglo opterećenje i ograničenja niti kada to nije potrebno.
Radna opterećenja vezana za CPU su posebna pričaBez obzira da li ih pokrećete sinhronizovano ili asinhrono unutar procesa, GIL (Global Interpreter Lock - Globalna zaključana interpretera) znači da samo jedna nit izvršava Python bajtkod u datom trenutku. Za zadatke poput obrade teških podataka, transkodiranja slika ili ML inferencije, razmislite o preusmjeravanju posla na radnike u odvojenim procesima ili vanjskim redovima čekanja.
Validacija i oblikovanje podataka pomoću Pydantica
Pydantic je mehanizam koji stoji iza funkcija validacije i serijalizacije FastAPI-ja.Nudi mnogo više od jednostavnih polja „obavezno naspram opcionalnih“; možete izraziti bogata ograničenja i transformacije direktno na svojim modelima.
Tipični slučajevi upotrebe uključuju validaciju dužine stringa, numeričkih raspona, formata e-pošte ili složenih ugniježđenih strukturaModeli se također mogu oslanjati na nabrajanja, regularne izraze, prilagođene validatore i mnoge druge alate za dezinfekciju ulaznih podataka prije nego što dođu do vaše poslovne logike.
Moćan obrazac je definiranje prilagođenog osnovnog modela za vaš projekat.Nasljeđivanjem svih shema iz jedne osnovne klase, možete standardizirati ponašanje koje se odnosi na više područja, kao što je format serijalizacije datuma i vremena, uslužne metode koje vraćaju samo JSON-sigurne vrijednosti ili uobičajene konfiguracijske zastavice.
Pydantic je odličan za čistu validaciju podataka, ali ne zna ništa o vašoj bazi podataka ili eksternim servisima.Ako vaša pravila zavise od upita (kao što je provjera da li korisnički ID postoji ili da li je e-mail jedinstven), uobičajena najbolja praksa je premjestiti te validacije u zavisnosti, a ne u validatore Pydantic modela.
Na taj način, sheme ostaju deklarativne i validacije se ponovo koriste na više krajnjih tačaka.Zavisnost može dohvatiti entitet, primijeniti pravila pristupa i ubrizgati rezultat u rutu, dok FastAPI kešira svoj rezultat po zahtjevu kako bi se izbjeglo dupliranje rada kada se ista zavisnost koristi više puta.
Zavisnosti kao gradivni blok za čistu arhitekturu
FastAPI-jev sistem za ubrizgavanje zavisnosti nije samo sintaksni šećer za parametre; to je osnovni arhitektonski alat.Pravilna upotreba zavisnosti vam omogućava da dijelite logiku, sprovodite invarijante i održavate rute vrlo malim i ekspresivnim.
Uobičajeni primjeri uključuju pružatelje sesija baze podataka, učitavače konfiguracije, pomagače autentifikacije i parsere paginacijeUmjesto ručnog otvaranja i zatvaranja sesija ili ponavljanja parametara paginacije svugdje, deklarišete ih jednom kao zavisnosti i ponovo ih koristite.
Suptilan, ali važan savjet za dizajn je razbijanje zavisnosti u male, kompozibilne jediniceUmjesto jednog giganta get_current_user_with_all_checks funkciju, možete imati odvojene zavisnosti za parsiranje JWT-a, učitavanje korisnika, provjeru aktivnosti računa i provjeru da li korisnik posjeduje dati resurs.
Budući da FastAPI kešira rezultate zavisnosti unutar jednog zahtjeva, njihovo sastavljanje je jeftino.Ako tri različite zavisnosti ponovo koriste pomoćnu funkciju nižeg nivoa (na primjer, parsiranje JWT zahtjeva), ta pomoćna funkcija će se pokrenuti samo jednom po zahtjevu čak i ako se na nju poziva više puta.
Prilikom dizajniranja ruta, imenovanje putanja može ili pomoći ili otežati ponovnu upotrebu zavisnosti.Na primjer, ako nekoliko krajnjih tačaka potvrdi da profile_id postoji, korištenje istog imena dosljedno u parametrima putanje olakšava uključivanje jedne zavisnosti koja se oslanja na profile_id, umjesto izmišljanja mnogih varijacija kao što su creator_id koje nose isto značenje.
Sigurnost, autentifikacija i autorizacija u vašoj strukturi
Sigurnost je jedno od područja gdje se jasna struktura brzo isplatiDirektno miješanje logike autentifikacije u nasumične rute otežava reviziju pravila pristupa i lako slučajno otkrivanje podataka.
Uobičajeni obrazac u rasporedima zasnovanim na funkcijama je imati auth paket sa vlastitim ruterom, shemama, servisnim slojem i izuzecimaTaj modul će obrađivati registraciju korisnika, tokove prijave, izdavanje i verifikaciju tokena, te može definirati zavisnosti poput get_current_user koje drugi moduli uvoze.
Unutar tog auth paketa možete podržati više mehanizama autentifikacije, kao što je OAuth2 sa lozinkom i tokenima nosioca, API ključevi za pozive između servisa ili tokeni zasnovani na JWT-u za API-je bez stanja. FastAPI-ji fastapi.security Uslužni programi vam također pomažu da opišete ove tokove u OpenAPI-ju.
Ključno je odvojiti autentifikaciju (ko je korisnik) od autorizacije (šta mu je dozvoljeno da radi).Vaša struktura bi trebala jasno staviti do znanja gdje se nalaze provjere dozvola: na primjer, u namjenskom sloju usluge ili politike umjesto raspršenih ad-hoc elemenata. if izjave na svakoj ruti.
Kad god imate posla s lozinkama, pridržavajte se utvrđenih kriptografskih praksiTajne heširanja koristite spor, slani algoritam kao što su bcrypt ili argon2 putem renomiranih biblioteka, izbjegavajte ručno kriptiranje i tretirajte pohranu tokena, CSRF zaštitu i sigurnost transporta (HTTPS) kao prvoklasne dijelove dizajna.
Efikasno testiranje FastAPI aplikacija
Struktura i testiranje se međusobno pojačavaju: čist raspored prirodno dovodi do koda koji se lakše testira.Sa FastAPI-jem možete testirati na nekoliko nivoa, od čistih jediničnih testova servisa do potpunih integracijskih testova koji pogađaju HTTP sloj.
Jedinični testovi trebaju se fokusirati na male dijelove bez nuspojavaČiste funkcije, Pydantic validatori, poslovne usluge koje rade na podacima u memoriji. One su obično vrlo brze i predstavljaju vašu prvu liniju odbrane od regresija.
Za vježbanje stvarnih HTTP krajnjih tačaka, možete koristiti ugrađeni testni klijent baziran na Starlette-u ili moderne asinhrone klijente kao što je httpxIdeja je da uvezete svoju aplikaciju, po potrebi prepišete zavisnosti (na primjer, ubrizgate testnu sesiju baze podataka) i pošaljete zahtjeve bez pokretanja eksternog servera.
Ako radite s asinhronim drajverima baza podataka ili drugim asinhronim integracijama, vrijedi postaviti asinhronog testnog klijenta od samog početka.Miješanje stilova sinhroniziranog i asinhronog testiranja kasnije često dovodi do zbunjujućih problema s petljom događaja koje je teže otkloniti nego jednostavnom standardizacijom jednog pristupa.
Korištenje baze podataka u testovima također interaguje s vašom strukturomPosjedovanjem centralnog database.py Modul koji definira tvornice motora i sesija, olakšava pokretanje testnih baza podataka, umotavanje testova u transakcije ili korištenje fixture-a koji skraćuju tabele između izvršavanja.
Od lokalnog razvoja do implementacije u produkciji
FastAPI aplikacije je jednostavno pokrenuti lokalno, ali zahtijevaju malo više planiranja u produkciji.Struktura vašeg projekta treba da bude jasna kako je aplikacija kreirana, odakle dolazi konfiguracija i kako su povezani evidentiranje i provjere ispravnosti.
Za razvoj, većina timova koristi Uvicorn s automatskim ponovnim punjenjem, obično putem naredbe poput uvicorn app.main:app --reload ili, u novijim postavkama, fastapi devOvo omogućava brze povratne petlje i savršeno je tokom iteracije.
U produkciji obično želite robusniju konfiguraciju.Uvicorn ili Hypercorn radnici kojima upravlja nadzornik procesa ili WSGI/ASGI omotač kao što je Gunicorn, često iza obrnutog proxyja (NGINX ili upravljani uravnoteživač opterećenja). Cilj je kontrolirati broj radnika, vremenska ograničenja i graciozna ponovna pokretanja, na osnovu informacija moderne DevOps prakse.
Konfiguraciju bi trebale voditi varijable okruženja, a ne fiksno kodirane vrijednostiPydantic-ovo upravljanje postavkama ili slični alati mogu vam pomoći da deklarišete klase tipiziranih postavki i učitate ih pri pokretanju, centralizirajući sve dugmad specifične za okruženje na jednom mjestu.
Prije nego što svoju aplikaciju proglasite spremnom za produkciju, provjerite nekoliko bitnih stvariStrukturirano evidentiranje, osnovne metrike, krajnje tačke ispravnosti za provjeru živosti i spremnosti, razumna ograničenja veličine tijela i jasna politika o izlaganju dokumentacije samo u okruženjima koja nisu javna ako vaš API nije namijenjen za opću upotrebu.
Imenovanje, dizajn baze podataka i migracije
Način na koji imenujete stvari u svojim modelima i datotekama shema također je dio strukture vašeg projekta.Nedosljedno imenovanje je jedan od najbržih načina da se zbune programeri koji rade na kodnoj bazi koju nisu kreirali.
Jednostavna i efikasna konvencija je korištenje lower_case_snake imena za tabele i kolone, preferirajte imena tabela u jednini (na primjer post, post_like, user_playlist) i grupirati povezane tabele sa zajedničkim prefiksom kao što je payment_ or post_.
Za vremenska polja, sufiksi poput _at za datume i vremena _date za obične datume, budite jasniStrogost ovdje sprječava igru pogađanja "je li ovo vremenska oznaka ili datum?" prilikom čitanja shema ili sirovih upita.
Migracije zaslužuju posebnu pažnju; trebaju biti deterministički, reverzibilni i deskriptivni — razmotrite sljedeće prakse migracija baza podatakaMnogi timovi usvajaju obrazac za nazive migracijskih datoteka kao što je YYYY-MM-DD_slug.py, što olakšava praćenje historije i razumijevanje promjena bez čitanja cijele razlike.
Za složeno izvještavanje ili ugniježđene odgovore, prihvatite svoju bazu podataka umjesto prekomjerne obrade u PythonuModerni SQL mehanizmi mogu obavljati spajanja, agregacije i izgradnju JSON-a mnogo brže od CPython-a, a vraćanje unaprijed oblikovanih struktura FastAPI-ju često pojednostavljuje vaše modele odgovora.
Alati, formatiranje i timske konvencije
Dobro strukturiran projekat je lakše održavati čistim kada koristite alate za sprovođenje stilskih pravila.Formateri koda, linteri i pre-commit hookovi vam pomažu da se fokusirate na poslovnu logiku umjesto da se raspravljate o praznom prostoru tokom pregleda koda.
Nedavno su alati poput Ruffa postali popularni jer kombiniraju više uloga u jednojUmjesto žongliranja s odvojenim uslužnim programima za formatiranje, sortiranje uvoza i linting, možete pokrenuti jedan brzi alat koji primjenjuje stotine pravila u cijeloj kodnoj bazi.
Pokretanje ovih alata putem jednostavnog skripta ili pre-commit hookova održava barijeru niskom.Nije svakom timu potrebna složena postavka hook-a, ali imati barem jednu naredbu koja standardizira raspored koda je laka pobjeda.
Konačno, razmislite o dokumentiranju svojih internih konvencija u kratkom "inženjerskom priručniku". koji se odnosi na agilne metode razvoja softveraOpišite kako treba imenovati module, kada kreirati novi paket domene, kako strukturirati testove i koji su sigurnosni obrasci obavezni. Ovo sprječava da znanje živi samo u glavama iskusnih programera.
Dizajniranje strukture FastAPI projekta se zapravo svodi na to da budući rad bude predvidljiv i dosadan.Kada svaka nova krajnja tačka, model ili usluga ima očigledan dom, programeri mogu brzo napredovati bez iznenađenja, sigurnost je lakše provjeriti, a aplikacija ima mnogo veće šanse da preživi rast u stvarnom svijetu bez urušavanja pod vlastitom težinom.