Over si svoje vedomosti z kapitol o Ktor serveri - setup, GET/POST požiadavky a napojenie na databázu. Klikni na Áno alebo Nie - tlačidlo sa hneď zafarbí (zelená = správne, červená = nesprávne) a zobrazí sa komentár s vysvetlením. Otázky prechádzaš po jednej pomocou tlačidiel nižšie.
Otázka 1 / 17
Funkcia embeddedServer(Netty, port = 8080) { ... } vytvorí a spustí Ktor server na porte 8080.
Áno. Netty je tu engine, ktorý server pod kapotou používa.
Volanie .start(wait = true) na serveri spôsobí, že program počká (beží), kým server neukončíme.
Áno. Bez wait = true by main() mohol skončiť ešte skôr, než server stihne obslúžiť požiadavky.
Blok routing { get("/") { ... } } definuje, ako má server odpovedať na GET požiadavku na koreňovú cestu.
Áno. Vo vnútri bloku máme prístup k call, cez ktorý napríklad odpovieme textom pomocou call.respondText(...).
Funkcia call.respond(dáta) vždy vráti dáta ako obyčajný text, aj keď je nainštalovaný ContentNegotiation.
Nie. Vďaka nainštalovanému ContentNegotiation s json() sa objekt automaticky serializuje do JSON.
Cestový parameter definovaný ako {id} v get("/users/{id}") vieme v handleri prečítať pomocou call.parameters["id"].
Áno. Vrátená hodnota je typu String?, preto ju často prevádzame napríklad pomocou toIntOrNull().
Funkcia call.receive<T>() spracuje telo POST požiadavky a deserializuje ho do typu T.
Áno. Napríklad call.receive<User>() prevedie prijaté JSON telo na inštanciu triedy User.
Po úspešnom vytvorení zdroja by mal server odpovedať stavovým kódom HttpStatusCode.Created (201).
Áno. Napríklad call.respond(HttpStatusCode.Created, savedUser) vráti aj stavový kód, aj samotný vytvorený objekt.
Ktor podporuje len metódy GET a POST - metódy PUT a DELETE nie sú v routingu dostupné.
Nie. Ktor podporuje aj put(...) a delete(...) v rámci bloku routing.
Príkaz curl -X POST -H "Content-Type: application/json" -d '{"name":"Novy"}' http://localhost:8080/users odošle POST požiadavku s JSON telom.
Áno. Parameter -X POST nastavuje HTTP metódu, -H hlavičku a -d telo požiadavky.
Knižnica Exposed slúži ako DSL (doménovo-špecifický jazyk) pre prácu s databázou v Kotline.
Áno. Umožňuje definovať tabuľky a vykonávať SQL operácie priamo pomocou Kotlin kódu.
H2 je databáza určená výhradne pre veľké produkčné nasadenia, nikdy sa nepoužíva na ukážky alebo testovanie.
Nie. H2 je naopak ľahká embedded databáza vhodná najmä na ukážky a testovanie. V reálnom produkčnom projekte by sme skôr použili PostgreSQL alebo MySQL.
Databázové operácie v Exposed sa vykonávajú vo vnútri bloku transaction { ... }.
Áno. Napríklad Users.selectAll() alebo Users.insertAndGetId { ... } musia byť volané vo vnútri transakcie.
Tabuľka definovaná ako object Users : Table() musí mať definovaný primárny kľúč, napríklad override val primaryKey = PrimaryKey(id).
Áno. Bez primárneho kľúča by tabuľka nemala jednoznačný identifikátor pre jednotlivé záznamy.
Funkciu SchemaUtils.create(Users) je potrebné volať pri každom spustení servera opakovane vo vnútri každého endpointu.
Nie. Táto funkcia sa typicky volá raz pri inicializácii databázy (napr. v initDB()), nie opakovane v každom endpointe.
Odporúčaná štruktúra väčšieho Ktor projektu zvyčajne oddeľuje routes, models a plugins do samostatných súborov.
Áno. Toto rozdelenie zlepšuje prehľadnosť a udržateľnosť projektu v porovnaní s jedným veľkým súborom Main.kt.
Server môže bežať aj na inom porte ako 8080, ak parameter port zmeníme napríklad na 8081.
Áno. Port 8080 je len predvolená hodnota v ukážkach, nie pevne daná vlastnosť Ktor servera.
Funkcie na vloženie a načítanie dát z databázy musia byť definované priamo vo vnútri routing bloku a nedajú sa z neho vyňať do samostatných funkcií.
Nie. Naopak je vhodné (a bežné) mať samostatné funkcie ako getAllUsers() alebo addUser(...), ktoré endpointy len volajú.
Tvoje skóre je 0 / 17