HTTP-клиент для Kotlin: топ библиотек для работы с сетью
Современная разработка на Kotlin немыслима без взаимодействия с удалёнными серверами. Будь то Android-приложение, бэкенд на Ktor или мультиплатформенный проект — HTTP-клиенты являются фундаментом для обмена данными. В этой статье мы рассмотрим четыре лучшие библиотеки для Kotlin: Ktor Client, OkHttp, Fuel и Retrofit. Вы узнаете их особенности, преимущества и получите практические примеры кода.
1. Ktor Client — нативный выбор для Kotlin
Ktor Client — это официальный HTTP-клиент от JetBrains, созданный специально для экосистемы Kotlin. Он полностью асинхронный, основан на корутинах и поддерживает мультиплатформенность (JVM, Android, iOS, JS, Native).
Ключевые особенности:
- Полная поддержка корутин Kotlin
- Модульная архитектура — подключайте только нужные плагины (JSON, WebSockets, логирование)
- Единый API для всех платформ
- Встроенная сериализация через
kotlinx.serialization
Пример GET-запроса:
import io.ktor.client.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
suspend fun fetchData(): String {
val client = HttpClient()
val response: HttpResponse = client.get("https://api.example.com/data")
return response.bodyAsText()
}
Когда выбирать: для мультиплатформенных проектов, микросервисов на Ktor, при работе с корутинами.
2. OkHttp — проверенный ветеран
OkHttp от Square — одна из самых популярных библиотек для JVM и Android. Хотя она написана на Java, её удобно использовать в Kotlin благодаря интероперабельности. OkHttp славится скоростью, эффективным пулом соединений и мощным перехватчиком запросов.
Ключевые особенности:
- Автоматическое управление соединениями (keep-alive, пулинг)
- Прозрачное сжатие GZIP
- Поддержка HTTP/2 и WebSocket
- Interceptor для логирования, кэширования, ретраев
Пример POST-запроса с JSON:
import okhttp3.*
import org.json.JSONObject
val client = OkHttpClient()
fun postJson(): String {
val json = JSONObject().apply {
put("name", "Kotlin")
put("version", 2.0)
}
val body = json.toString().toRequestBody("application/json".toMediaType())
val request = Request.Builder()
.url("https://api.example.com/items")
.post(body)
.build()
return client.newCall(request).execute().body?.string() ?: ""
}
Когда выбирать: для Android-приложений, когда нужна максимальная производительность и гибкость перехвата.
3. Fuel — элегантный DSL для Kotlin
Fuel — это лёгкая библиотека с выразительным DSL, написанная на чистом Kotlin. Она идеально подходит для небольших проектов и прототипов, где важна простота и читаемость кода.
Ключевые особенности:
- Встроенный DSL для построения запросов
- Поддержка корутин и RxJava
- Автоматическая десериализация в data-классы
- Минимальное количество зависимостей
Пример запроса с DSL:
import com.github.kittinunf.fuel.httpGet
import com.github.kittinunf.fuel.core.FuelError
import com.github.kittinunf.result.Result
fun fuelExample() {
val (request, response, result) = "https://api.example.com/users"
.httpGet()
.responseString()
when (result) {
is Result.Success -> println(result.get())
is Result.Failure -> println(result.error)
}
}
Когда выбирать: для простых скриптов, учебных проектов или когда DSL кажется удобнее стандартных вызовов.
4. Retrofit — типизированный клиент для REST API
Retrofit (также от Square) — это декларативный HTTP-клиент, который превращает REST API в Kotlin-интерфейсы. В сочетании с Moshi или Gson он автоматически преобразует JSON в объекты.
Ключевые особенности:
- Аннотации для описания эндпоинтов
- Автоматическая сериализация/десериализация
- Интеграция с корутинами через
suspendфункции - Поддержка различных конвертеров (M