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

\n

El desarrollo moderno en Kotlin es impensable sin la interacción con servidores remotos. Ya sea una aplicación móvil en Android o una solución de servidor con Ktor, las solicitudes HTTP son la base del intercambio de datos. En este artículo, analizaremos cómo crear clientes HTTP en Kotlin utilizando las mejores prácticas, bibliotecas populares y un enfoque moderno con corrutinas. Aprenderá a realizar solicitudes GET y POST, manejar errores, trabajar con JSON y construir una arquitectura de capa de red sólida.

\n\n

¿Por qué Kotlin es ideal para clientes HTTP?

\n

Kotlin ofrece una sintaxis concisa, seguridad nula (null safety) y compatibilidad total con el ecosistema Java. Gracias a las corrutinas (coroutines), las solicitudes asíncronas se vuelven intuitivas, sin callbacks engorrosos. Puede escribir código secuencial que se ejecuta de forma asíncrona, lo que simplifica enormemente la lectura y la depuración. Además, Kotlin se utiliza activamente en el desarrollo de Android, donde las solicitudes de red son una tarea cotidiana.

\n\n

Bibliotecas principales para HTTP en Kotlin

\n

Hoy en día, los tres enfoques más populares son:

\n
    \n
  • Ktor Client — cliente multiplataforma de JetBrains. Compatible con JVM, Android, iOS, JS y Native. Ideal para proyectos que necesitan una base de código unificada.
  • \n
  • OkHttp + Retrofit — stack clásico para Android/JVM. OkHttp se encarga del trabajo de red de bajo nivel, mientras que Retrofit genera interfaces tipadas.
  • \n
  • Fuel — biblioteca ligera con enfoque funcional. Adecuada para proyectos pequeños.
  • \n
\n

En este artículo nos centraremos en Ktor y OkHttp, ya que cubren el 90% de los escenarios.

\n\n

Configuración del proyecto y primeras solicitudes

\n

Para empezar, agreguemos las dependencias. Si usa Gradle (Kotlin DSL), incluya Ktor Client:

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

Para OkHttp, las dependencias serán:

\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

Solicitud GET con Ktor Client

\n

Creemos un cliente simple y realicemos una solicitud GET a una API pública:

\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// Uso en una corrutina\nfun main() = runBlocking {\n    println(fetchData())\n}
\n

Tenga en cuenta: suspend es la palabra clave de Kotlin para funciones suspendibles. Esto permite ejecutar la solicitud sin bloquear el hilo.

\n\n

Solicitud GET con OkHttp

\n

Un ejemplo similar con OkHttp se ve así:

\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() ?: "Error"\n    }\n}\n\n// Llamada en un hilo normal (bloqueante)\nfun main() {\n    println(fetchDataSync())\n}
\n

OkHttp es síncrono por defecto, pero se adapta fácilmente a corrutinas con suspendCancellableCoroutine.

\n\n

Solicitudes POST y trabajo con JSON

\n

El envío de datos es la segunda operación más importante. Veamos cómo enviar JS

Blogs

Book Recommendations