HTTP-Client in Kotlin: Anfragen richtig stellen von A bis Z

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 von A bis Z

\n

Moderne Entwicklung mit Kotlin ist ohne die Interaktion mit entfernten Servern undenkbar. Ob es sich um eine mobile App auf Android oder eine serverseitige Lösung mit Ktor handelt – HTTP-Anfragen sind die Grundlage des Datenaustauschs. In diesem Artikel werden wir uns ansehen, wie man HTTP-Clients in Kotlin erstellt, unter Verwendung bewährter Methoden, beliebter Bibliotheken und des modernen Ansatzes mit Coroutines. Sie erfahren, wie Sie GET- und POST-Anfragen stellen, Fehler behandeln, mit JSON arbeiten und eine zuverlässige Architektur der Netzwerkschicht aufbauen.

\n\n

Warum ist Kotlin ideal für HTTP-Clients?

\n

Kotlin bietet eine prägnante Syntax, Null-Sicherheit (null safety) und vollständige Kompatibilität mit dem Java-Ökosystem. Dank Coroutines werden asynchrone Anfragen intuitiv verständlich, ohne umständliche Callbacks. Sie können sequenziellen Code schreiben, der asynchron ausgeführt wird – das vereinfacht das Lesen und Debuggen erheblich. Darüber hinaus wird Kotlin aktiv in der Android-Entwicklung eingesetzt, wo Netzwerkanfragen eine alltägliche Aufgabe sind.

\n\n

Wichtige Bibliotheken für HTTP in Kotlin

\n

Heutzutage sind drei Ansätze am beliebtesten:

\n
    \n
  • Ktor Client – ein plattformübergreifender Client von JetBrains. Unterstützt JVM, Android, iOS, JS und Native. Ideal für Projekte, die eine einheitliche Codebasis benötigen.
  • \n
  • OkHttp + Retrofit – der klassische Stack für Android/JVM. OkHttp ist für die low-level Netzwerkarbeit zuständig, während Retrofit typisierte Schnittstellen generiert.
  • \n
  • Fuel – eine leichte Bibliothek mit einem funktionalen Ansatz. Geeignet für kleinere Projekte.
  • \n
\n

In diesem Artikel konzentrieren wir uns auf Ktor und OkHttp, da sie 90% der Szenarien abdecken.

\n\n

Projekt einrichten und erste Anfragen

\n

Zunächst fügen wir die Abhängigkeiten hinzu. Wenn Sie Gradle (Kotlin DSL) verwenden, binden Sie den Ktor Client ein:

\n
dependencies {\n    implementation("io.ktor:ktor-client-core:2.3.7")\n    implementation("io.ktor:ktor-client-cio:2.3.7") // CIO-Engine\n    implementation("io.ktor:ktor-client-content-negotiation:2.3.7")\n    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")\n}
\n

Für OkHttp sehen die Abhängigkeiten wie folgt aus:

\n
dependencies {\n    implementation("com.squareup.okhttp3:okhttp:4.12.0")\n    implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")\n    implementation("com.google.code.gson:gson:2.10.1")\n}
\n\n

GET-Anfrage mit Ktor Client

\n

Erstellen wir einen einfachen Client und führen eine GET-Anfrage an eine öffentliche API durch:

\n
import io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\n\nsuspend fun fetchData(): String {\n    val client = HttpClient()\n    val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/posts/1")\n    val body = response.bodyAsText()\n    client.close()\n    return body\n}\n\n// Verwendung in einer Coroutine\nfun main() = runBlocking {\n    println(fetchData())\n}
\n

Beachten Sie: suspend ist das Kotlin-Schlüsselwort für unterbrechbare Funktionen. Dies ermöglicht die Ausführung der Anfrage ohne Blockierung des Threads.

\n\n

GET-Anfrage mit OkHttp

\n

Ein ähnliches Beispiel mit OkHttp sieht so aus:

\n
import okhttp3.OkHttpClient\nimport okhttp3.Request\n\nfun fetchDataSync(): String {\n    val client = OkHttpClient()\n    val request = Request.Builder()\n        .url("https://jsonplaceholder.typicode.com/posts/1")\n        .build()\n    client.newCall(request).execute().use { response ->\n        return response.body?.string() ?: "Fehler"\n    }\n}\n\n// Aufruf im normalen Thread (blockierend)\nfun main() {\n    println(fetchDataSync())\n}
\n

OkHttp ist standardmäßig synchron, lässt sich aber leicht mit suspendCancellableCoroutine an Coroutines anpassen.

\n\n

POST-Anfragen und Arbeit mit JSON

\n

Das Senden von Daten ist die zweitwichtigste Operation. Betrachten wir, wie man JS

Blogs

Buchempfehlungen