Cliente HTTP en Kotlin: haciendo solicitudes correctamente de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente HTTP en Kotlin: haciendo solicitudes correctamente: de la A a la Z



El desarrollo moderno en Kotlin es impensable sin la interacción en red. Ya sea una aplicación Android, una solución de servidor con Ktor o una aplicación de escritorio, las solicitudes HTTP siguen siendo la forma principal de intercambiar datos. En este artículo, analizaremos cómo organizar correctamente un cliente HTTP en Kotlin, revisaremos las bibliotecas populares y las mejores prácticas.



¿Por qué Kotlin es ideal para solicitudes HTTP?



Kotlin ofrece sintaxis moderna, seguridad nula y compatibilidad total con el ecosistema Java. Gracias a las corrutinas y las API de flujo, el trabajo con la red se vuelve limpio y asíncrono. Las principales ventajas son:



  • Corrutinas — hilos ligeros para operaciones asíncronas sin bloqueos
  • Constructores type-safe — construcción conveniente de solicitudes HTTP
  • Clases selladas — manejo elegante de estados de respuesta
  • Funciones de extensión — ampliación de la funcionalidad de las bibliotecas


Elección del cliente HTTP para Kotlin



Hoy en día, tres bibliotecas dominan el ecosistema Kotlin: OkHttp, Ktor Client y Retrofit. Veamos cada una con ejemplos de código.



1. OkHttp — una opción probada por el tiempo



OkHttp de Square es el cliente HTTP más popular para JVM. Es eficiente, compatible con HTTP/2, compresión automática y almacenamiento en caché.



// build.gradle.ktsimplementation("com.squareup.okhttp3:okhttp:4.12.0")

// Ejemplo de solicitud GET con OkHttpimport okhttp3.OkHttpClientimport okhttp3.Requestimport kotlinx.coroutines.Dispatchersimport kotlinx.coroutines.withContext

class OkHttpExample { private val client = OkHttpClient.Builder() .connectTimeout(30, java.util.concurrent.TimeUnit.SECONDS) .readTimeout(30, java.util.concurrent.TimeUnit.SECONDS) .build()

suspend fun fetchData(url: String): String = withContext(Dispatchers.IO) { val request = Request.Builder() .url(url) .header("Accept", "application/json") .build()

client.newCall(request).execute().use { response -> if (!response.isSuccessful) { throw RuntimeException("Error: ${response.code}") } response.body?.string() ?: throw RuntimeException("Respuesta vacía") } }}


2. Ktor Client — la opción nativa para Kotlin



Ktor Client es parte del ecosistema JetBrains, completamente escrito en Kotlin con soporte multiplataforma. Es ideal para servidores Ktor y proyectos Android/iOS.



// build.gradle.ktsimplementation("io.ktor:ktor-client-core:2.3.7")implementation("io.ktor:ktor-client-cio:2.3.7")implementation("io.ktor:ktor-client-content-negotiation:2.3.7")implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")

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.client.statement.*import io.ktor.serialization.kotlinx.json.*import kotlinx.serialization.Serializable

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

class KtorExample { private val client = HttpClient(CIO) { install(ContentNegotiation) { json(Json { ignoreUnknownKeys = true isLenient = true }) } engine { requestTimeout = 30_000 } }

suspend fun getPost(id: Int): Post { val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/posts/$id") return response.body() }

suspend fun createPost(post: Post): Post { val response: HttpResponse = client.post("https://jsonplaceholder.typicode.com/posts") { setBody(post)

Blogs

Book Recommendations