Over si svoje vedomosti z kapitol o Ktor kliente - HTTP požiadavky, parsovanie odpovedí, výnimky a sealed triedy. 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
Ktor je framework, ktorý sa dá použiť ako HTTP klient aj ako HTTP server.
Áno. V kapitole 17 sa venujeme klientovi, v kapitole 18 potom serverovej časti.
Funkcia runBlocking spustí coroutine a zablokuje hlavné vlákno, kým sa nedokončí.
Áno. Používa sa napríklad na to, aby sme mohli v main() volať suspend funkcie Ktor klienta.
Plugin ContentNegotiation s funkciou json() zabezpečuje automatické (de)serializovanie JSON tela požiadaviek a odpovedí.
Áno. Vďaka nemu vieme priamo volať response.body<User>() bez ručného parsovania JSON reťazca.
Funkcia client.post(...) odošle GET požiadavku na daný endpoint.
Nie. client.post(...) odošle POST požiadavku. Na GET požiadavku slúži client.get(...).
Pri POST požiadavke telo požiadavky nastavíme pomocou funkcie setBody(...) vo vnútri bloku požiadavky.
Áno. Spolu s contentType(ContentType.Application.Json) zabezpečí odoslanie objektu ako JSON telo požiadavky.
Funkcia response.body<T>() automaticky deserializuje telo odpovede do inštancie zadaného typu T.
Áno. Funguje to aj pre kolekcie, napríklad response.body<List<Todo>>() vráti zoznam objektov.
Pomocou parameter("userId", 1) vieme do GET požiadavky pridať query parameter.
Áno. Výsledná URL by obsahovala ?userId=1 ako query string.
response.status vždy vráti hodnotu 200 OK, nezávisle od skutočného výsledku požiadavky.
Nie. response.status vracia skutočný HTTP stavový kód odpovede servera - preto by sme ho mali overiť pred spracovaním dát.
ClientRequestException reprezentuje chyby typu 4xx (napr. 404 Not Found).
Áno. Naopak ServerResponseException reprezentuje chyby typu 5xx a RedirectResponseException presmerovania 3xx.
ServerResponseException sa vyhodí pri chybách na strane klienta, napríklad pri neplatných vstupných dátach.
Nie. ServerResponseException reprezentuje chyby na strane servera (5xx). Chyby klienta (4xx) rieši ClientRequestException.
Plugin HttpTimeout nám umožňuje nastaviť časový limit (napr. requestTimeoutMillis) pre HTTP požiadavky.
Áno. Ak požiadavka trvá dlhšie ako nastavený limit, klient ju preruší výnimkou.
Plugin HttpRequestRetry umožňuje automaticky zopakovať požiadavku pri chybe servera.
Áno. Napríklad maxRetries = 3 spolu s retryOnServerErrors(3) zopakuje požiadavku pri zlyhaní na strane servera.
Sealed triedu, napr. NetworkResult so stavmi Loading, Success a Error, je vhodné použiť na reprezentáciu výsledku sieťovej požiadavky.
Áno. Tento vzor (sealed class + when) je bežný pri spracovaní stavov UI, napríklad v Android vývoji.
Funkcia označená kľúčovým slovom suspend môžeme zavolať z bežnej (nesuspendovanej) funkcie bez akéhokoľvek obmedzenia.
Nie. suspend funkciu môžeme zavolať len z inej suspend funkcie alebo z coroutine (napr. cez runBlocking).
Pri spracovaní chýb v fetchTodos je vhodné obaliť sieťové volanie do try-catch a pri zlyhaní vrátiť napríklad NetworkResult.Error.
Áno. Takto premeníme výnimku na explicitný stav, ktorý vieme ďalej spracovať pomocou when.
Klienta (HttpClient) by sme mali po skončení práce s ním zatvoriť volaním client.close().
Áno. Uvoľní sa tým sieťové spojenie a ostatné zdroje, ktoré klient používal.
Kontrola if (response.status == HttpStatusCode.OK) je zbytočná, keďže Ktor automaticky vyhodí výnimku pri akomkoľvek stavovom kóde inom ako 200.
Nie. Takáto kontrola je užitočná najmä vtedy, keď chceme rozlíšiť úspech od zlyhania bez toho, aby sme sa spoliehali výhradne na výnimky.
Tvoje skóre je 0 / 17