Ktor je HTTP klient a server framework pre Kotlin. Najprv si ukážeme použitie Ktor Client na odosielanie HTTP požiadaviek.
V build.gradle.kts pridáme potrebné závislosti:
plugins {
kotlin("jvm") version "2.0.21"
kotlin("plugin.serialization") version "2.0.21"
}
dependencies {
implementation("io.ktor:ktor-client-core:3.0.3")
implementation("io.ktor:ktor-client-cio:3.0.3")
implementation("io.ktor:ktor-client-content-negotiation:3.0.3")
implementation("io.ktor:ktor-serialization-kotlinx-json:3.0.3")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
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 User(val id: Int, val name: String, val email: String)
fun main() = runBlocking {
val client = HttpClient(CIO) {
install(ContentNegotiation) {
json()
}
}
val response = client.get("https://jsonplaceholder.typicode.com/users/1")
val user = response.body<User>()
println(user)
client.close()
}
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.http.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.serialization.Serializable
import kotlinx.coroutines.runBlocking
@Serializable
data class Post(val userId: Int, val id: Int?, val title: String, val body: String)
fun main() = runBlocking {
val client = HttpClient(CIO) {
install(ContentNegotiation) { json() }
}
val newPost = Post(userId = 1, id = null, title = "Novy prispevok", body = "Obsah prispevku")
val response = client.post("https://jsonplaceholder.typicode.com/posts") {
contentType(ContentType.Application.Json)
setBody(newPost)
}
val createdPost = response.body<Post>()
println(createdPost)
client.close()
}
runBlockingje špeciálna funkcia, ktorá spustí coroutine a blokuje hlavné vlákno kým neskončí.
Nastav Ktor klient s CIO a vykonaj GET požiadavku na verejné testovacie API.
Vytvor @Serializable triedu pre odpoveď a vypíš z nej vybrané pole.
Odošli POST požiadavku s JSON telom a vypíš odpoveď servera.