Študijné materiály

V predošlej lekcii sme videli, ako parsovať odpoveď pomocou body<T>(). Pozrime sa na to podrobnejšie:

import io.ktor.client.*
import io.ktor.client.call.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.client.request.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.serialization.Serializable
import kotlinx.coroutines.runBlocking

@Serializable
data class Todo(val userId: Int, val id: Int, val title: String, val completed: Boolean)

fun main() = runBlocking {
    val client = HttpClient(CIO) {
        install(ContentNegotiation) { json() }
    }

    // Parsovanie jedneho objektu
    val todo = client.get("https://jsonplaceholder.typicode.com/todos/1")
        .body<Todo>()
    println("${todo.title} - ${todo.completed}")

    // Parsovanie zoznamu objektov
    val todos = client.get("https://jsonplaceholder.typicode.com/todos")
        .body<List<Todo>>()
    println("Pocet todo: ${todos.size}")

    // Parsovanie do JSON stringu
    val jsonString = client.get("https://jsonplaceholder.typicode.com/todos/1")
        .body<String>()
    println(jsonString)

    client.close()
}

17.2.1 Práca s response headers

val response = client.get("https://jsonplaceholder.typicode.com/todos/1")
println(response.status)                    // 200 OK
println(response.headers["Content-Type"])   // application/json; charset=utf-8

17.2.2 URL parametre

// Query parametre
val response = client.get("https://jsonplaceholder.typicode.com/todos") {
    parameter("userId", 1)
    parameter("completed", false)
}

// Path parametre
val userId = 1
val response = client.get("https://jsonplaceholder.typicode.com/users/$userId")

Vždy skontroluj odpoveď pomocou response.status pred parsovaním.

Úlohy

Úloha 1

Načítaj jeden objekt z API pomocou body<T>() a vypíš jeho názov.

Úloha 2

Načítaj zoznam objektov, vypíš jeho veľkosť a prvé tri prvky.

Úloha 3

Pridaj do GET požiadavky query parameter a pred parsovaním over stav odpovede.