Was ist OkHttp und warum braucht man es?
OkHttp ist eine leistungsstarke und effiziente HTTP-Bibliothek für die JVM (Java Virtual Machine), Android und Kotlin/Native, entwickelt von Square. Sie bietet eine komfortable API zum Senden von HTTP-Anfragen und Verarbeiten von Antworten. OkHttp ist der De-facto-Standard für Netzwerkkommunikation im Android-Ökosystem und wird auch in serverseitigen Kotlin-Anwendungen intensiv genutzt.
Warum OkHttp anstelle der Standard-Java-Klassen (HttpURLConnection) verwenden?
- Einfachheit und Komfort: Eine saubere, fließende (fluent) API, die leicht zu lesen und zu schreiben ist.
- Leistung: Integrierte Unterstützung für HTTP/2, automatische Antwortkomprimierung (gzip), Verbindungspooling (connection pooling) und Caching.
- Zuverlässigkeit: Automatische Wiederholungsversuche bei Netzwerkfehlern, Robustheit gegenüber DNS- und TLS-Problemen.
- Flexibilität: Einfach konfigurierbare Interceptors für Logging, Authentifizierung und das Modifizieren von Anfragen und Antworten.
- Testbarkeit: Möglichkeit, die Netzwerkschicht mit MockWebServer zu simulieren.
OkHttp ist ideal für Android-Apps, REST-API-Clients, Microservices und alle anderen Kotlin-Projekte, die eine zuverlässige und schnelle HTTP-Kommunikation benötigen.
Installation
OkHttp wird über Maven Central verteilt. Zur Einbindung in Ihr Projekt verwenden Sie das Build-System Gradle (am weitesten verbreitet für Kotlin).
Für Android / Kotlin/JVM-Projekte (build.gradle.kts):
dependencies {
implementation("com.squareup.okhttp3:okhttp:4.12.0")
// Für Logging (optional)
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
}
Für Android / Kotlin/JVM-Projekte (build.gradle):
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
}
Für Maven (pom.xml):
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
Wichtig: Stellen Sie sicher, dass die OkHttp-Version mit Ihrer Kotlin-Version kompatibel ist. Die aktuelle Version finden Sie immer auf MVNRepository.
Schnellstart
Das einfachste Beispiel: eine GET-Anfrage ausführen und den Antworttext als String erhalten.
import okhttp3.OkHttpClient
import okhttp3.Request
import java.io.IOException
fun main() {
// 1. Client erstellen (normalerweise einer für die gesamte App)
val client = OkHttpClient()
// 2. Anfrage erstellen
val request = Request.Builder()
.url("https://api.github.com/users/octocat")
.build()
// 3. Anfrage synchron ausführen (blockiert den aktuellen Thread)
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) {
throw IOException("Unerwarteter Statuscode $response")
}
// 4. Antworttext auslesen
println(response.body?.string())
}
}
Erklärung:
OkHttpClient()— erstellt eine Client-Instanz. Diese ist threadsicher, daher empfiehlt es sich, eine Instanz zu erstellen und wiederzuverwenden.Request.Builder()— verwendet das Builder-Entwurfsmuster zur Konfiguration der Anfrage.client.newCall(request)— erstellt einen neuen Aufruf (Call), der synchron (execute()) oder asynchron (enqueue()) ausgeführt werden kann.response.use { ... }— stellt sicher, dass die Antwortressourcen (Body, Verbindung) nach der Nutzung geschlossen werden.response.body?.string()— liest den Antworttext als String. Wichtig: Der Body kann nur einmal gelesen werden.
Auch in der Bibliothek
JSON-Verarbeitung in Java: Die Bibliotheken Jackson und Gson für die Datenarbeit
Rate Limiting in C# (.NET): Leitfaden zur Bibliothek System.Threading.RateLimiting
Abhängigkeitsinjektion (Dependency Injection) in C++: Container und Praxis
SMS-Versand mit Rust: RustSMS – API-Bibliothek für die Arbeit mit SMS-Gateways