HTTP-Client in Kotlin: Anfragen richtig stellen mit ktor und OkHttp

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTTP-Client in Kotlin: Anfragen richtig stellen



Moderne Entwicklung für Android und Backend-Dienste in Kotlin kommt selten ohne Interaktion mit entfernten APIs aus. Die Erstellung eines zuverlässigen HTTP-Clients ist eine grundlegende Aufgabe, von deren korrekter Lösung die Stabilität der gesamten Anwendung abhängt. In diesem Artikel werden wir uns ansehen, wie man HTTP-Anfragen in Kotlin mit den beiden beliebtesten Bibliotheken durchführt: Ktor Client und OkHttp. Sie erfahren, wie Sie GET- und POST-Anfragen senden, JSON verarbeiten, Fehler verwalten und sauberen, wartbaren Code schreiben.



Warum Ktor Client die Wahl des modernen Kotlin-Entwicklers ist



Ktor Client ist ein asynchroner HTTP-Client, der speziell für Kotlin vom JetBrains-Team entwickelt wurde. Er unterstützt vollständig Coroutines, was den Code prägnant und sicher macht. Im Gegensatz zu OkHttp ist Ktor von Grund auf für Multiplattform-Fähigkeiten konzipiert: Derselbe Code funktioniert auf Android, iOS, JVM, JS und Native.



Abhängigkeiten installieren

Fügen Sie für die Arbeit mit Ktor Client die folgenden Abhängigkeiten in Ihre Datei build.gradle.kts ein:

dependencies {    // Basis-Client    implementation("io.ktor:ktor-client-core:2.3.7")    // Engine für JVM (OkHttp oder CIO)    implementation("io.ktor:ktor-client-okhttp:2.3.7")    // Für JSON-Serialisierung    implementation("io.ktor:ktor-client-content-negotiation:2.3.7")    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")    // Kotlinx Serialization    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}


Einfache GET-Anfrage

Erstellen wir einen HTTP-Client und führen eine GET-Anfrage an eine Test-API (JSONPlaceholder) durch:

import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*import kotlinx.coroutines.runBlocking

suspend fun fetchUser(userId: Int): String { val client = HttpClient { // Basis-Konfiguration engine { // Einstellungen für die OkHttp-Engine } } val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/users/$userId") return response.bodyAsText()}

fun main() = runBlocking { val userData = fetchUser(1) println(userData)}

Beachten Sie: fetchUser ist eine suspend-Funktion. Dies ermöglicht es, sie aus einer Coroutine heraus aufzurufen, ohne den Thread zu blockieren.



POST-Anfrage mit JSON-Body

Um Daten im JSON-Format zu senden, binden wir das Plugin ContentNegotiation ein und definieren eine data-Klasse:

import io.ktor.client.*import io.ktor.client.call.*import io.ktor.client.plugins.contentnegotiation.*import io.ktor.client.request.*import io.ktor.http.*import io.ktor.serialization.kotlinx.json.*import kotlinx.serialization.Serializableimport kotlinx.serialization.json.Json

@Serializabledata class Post(val userId: Int, val id: Int? = null, val title: String, val body: String)

suspend fun createPost(post: Post): Post { val client = HttpClient { install(ContentNegotiation) { json(Json { ignoreUnknownKeys = true prettyPrint = true }) } } val response: Post = client.post("https://jsonplaceholder.typicode.com/posts") { contentType(ContentType.Application.Json) setBody(post) }.body() client.close() return response}

fun main() = runBlocking { val newPost = Post(userId = 1, title = "Ktor Client", body = "Funktioniert einwandfrei!") val createdPost = createPost(newPost) println(createdPost)}

Der entscheidende Punkt: Das Plugin ContentNegotiation serialisiert das Objekt automatisch in JSON und deserialisiert die Antwort zurück in die data-Klasse.



OkHttp — der bewährte Standard für Android

OkHttp bleibt der De-facto-Standard für Netzwerkanfragen in der Android-Entwicklung. Es ist schnell, zuverlässig und unterstützt P

Blogs

Buchempfehlungen