2. diel - Zoznámenie s FastAPI frameworkom pre Python
V minulej lekcii, Úvod do FastAPI frameworku a webových aplikácií v Pythone , sme absolvovali úvod do webových aplikácií prostredníctvom frameworku FastAPI.
V dnešnom tutoriáli webových aplikácií s frameworkom FastAPI sa vrhneme na samotný framework. Najprv si ho nainštalujeme a potom vytvoríme svoju prvú webovú aplikáciu v Pythone.
Inštalácia FastAPI
Na inštaláciu FastAPI (v kurze budeme používať verziu 0.104.0) potrebujeme Python vo verzii 3.8 alebo novšiu, s tým budeme počítať aj v kurze. Budeme potrebovať aj server, konkrétne Uvicorn. Uvicorn je Asynchronous Server Gateway Interface (ASGI) server, ktorý sa často používa na nasadenie webových aplikácií vytvorených pomocou FastAPI. Oba balíčky nainštalujeme nasledujúcimi príkazmi, ktoré vložíme do príkazového riadka terminálu:
To je zatiaľ všetko, čo budeme potrebovať. V príkazovom riadku uvidíme výstup (tu skrátený, pretože je trochu dlhý):
Pozor, musíme dodržať presné verzie modulov,
komponentov a skrátka všetkých verzovaných prvkov! Vo FastAPI
budeme neskôr vytvárať celkom pokročilý projekt, ktorý závisí od
množstva knižníc, databázy atď. Použiť najnovšiu verziu nejakej
komponenty, čo práve včera vyšla, naozaj nie je dobrý nápad. Projekt potom
bez odbornej úpravy pravdepodobne nebude fungovať! Za dobrý príklad
poslúži knižnica Pandas
, ktorá vo verzii 2.0 stratila podporu
pre metódu append()
. Nahradila ju metóda concat()
,
samozrejme s inou syntaxou. Pri verziách knižníc, modul atď. skrátka
neplatí ako napr. pri aktualizácii Windows, že chceme každý deň
používať tú najnovšiu. Neustále aktualizácie všetkého by totiž
vyžadovali každodenné a komplexné zmeny kódu projektu a reálne sa tak
nevykonávajú. Z rovnakého dôvodu aj my aktualizujeme kurzy v pravidelných
intervaloch a nové verzie k sebe potom zladíme tak, aby všetko fungovalo.
Vytvorenie projektu
Vytvoríme si pracovnú zložku pre nový projekt s názvom
mysite/
. FastAPI nám necháva voľnú ruku a na rozdiel od napr.
Djanga nevyžaduje žiadnu konkrétnu štruktúru projektu. My si teda len v
našom priečinku mysite/
vytvoríme súbor main.py
. A
to je všetko, zatiaľ sa nám všetok kód zmestí do jediného súboru. Ide to
vážne fast, že?
Vytvorenie aplikácie Hello World
V nastavenom minimalizme budeme pokračovať. Podržíme sa nepísaného pravidla a ako prvú FastAPI aplikáciu vytvoríme "Hello World". Aj v tomto prípade budeme raz dvaja hotoví.
Na prvý riadok v našom main.py
príde tradične špecifikácia
závislostí, ktoré chceme do našej aplikácie importovať, v našom prípade
zatiaľ iba:
Pod tým vytvoríme
inštanciu triedy FastAPI
, ktorú sme si práve naimportovali.
Trieda obsahuje všetku potrebnú funkcionalitu frameworku:
Obvykle sa inštancia
FastAPI
ukladá do premennej pomenovanej práve ako
app
. Názov je v skutočnosti na nás, ide len o konvenciu. Pokiaľ
ale použijeme vlastný názov, trochu sa tým zmení kód a príkaz na
spustenie servera. To ale uvidíme za chvíľu.
Teraz už len vytvoríme funkciu, ktorá vráti obligátnu hlášku:
A to je celé, doslova pár riadkov a máme hotovú aplikáciu!
V prvom riadku funkcie, ktorú sme teraz napísali, je dekorátor. FastAPI ich používa na
definíciu ciest (často sa tiež pre nich používajú
termíny "endpoint" alebo "rúta") a operácií, teda HTTP
metód, ktoré udávajú druh požiadavky a špecifikujú akciu, ktorá má byť
vykonaná na nejakých zdrojoch. V našom prípade teda kód hovorí: "nižšie
definovaná funkcia index()
má na starosti GET
požiadavky mieriace na adresu "/"
".
Všimnime si, že dekorátor app()
zodpovedá našej premennej
app
, v ktorej je uložená inštancia FastAPI
. Pokiaľ
by sme si premenou pomenovali napríklad my_awesome_app
, mala by
naša funkcia index()
dekorátor
@my_awesome_app.get("/")
.
V druhom riadku definujeme dekorovanú funkciu index()
. Slovko
async
hovorí, že pôjde o tzv. asynchrónnu funkciu. FastAPI ich
podporuje defaultne. My ich výhody zatiaľ nepocítime, ale je určite dobré o
nich vedieť. Je to jedna z predností frameworku. Vynechaním
async
by sa z našej index()
funkcie stala bežná
funkcia a fungovala by úplne rovnako.
V skratke, princíp asynchrónneho kódu umožňuje vykonávať niekoľko operácií paralelne, aby niektorá z tých pomalšie vykonávaných "nebrzdila" celú aplikáciu.
No a nakoniec v treťom riadku len vraciame požadovanú odpoveď vo formáte JSON.
Spustenie servera
Z úvodnej lekcie už vieme, že na to, aby sme mohli k našej aplikácii pristúpiť cez webový prehliadač, potrebujeme server.
Ako server budeme používať Uvicorn, ktorý sme si nainštalovali na
začiatku lekcie. Spustenie servera vykonáme zadaním rovnomenného príkazu.
Na to potrebujeme otvoriť príkazový riadok v priečinku mysite/
,
kde sa nachádza náš súbor s aplikáciou, teda main.py
.
Zadáme príkaz:
Po chvíli sa do konzoly vypíše:
Všimnime si, že parameter
app
v uvicorn príkaze je opäť rovnaký ako názov premennej
app
s našou inštanciou triedy FastAPI
. Názov
Main
naopak zodpovedá menu modulu obsahujúceho aplikáciu, v
našom prípade teda main.py
.
Naša aplikácia teraz beží na lokálnom serveri na adrese
http://localhost:8000/
. Zadáme túto adresu do svojho webového
prehliadača alebo klikneme na odkaz v konzole. Uvidíme výsledok nášho
snaženia:
V príkazovom riadku budeme vypisovať všetky požiadavky na server.
Pokiaľ budeme chcieť server ukončiť, stlačíme Ctrl + C.
Zdrojový kód je priložený na konci lekcie.
V nasledujúcej lekcii, Path a query parametre vo FastAPI , si vysvetlíme rozdiely medzi path a query parametrami a priblížime si význam typových anotácií a nepovinných parametrov funkcií.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 90x (640 B)