Ktor Client para Kotlin: guía completa con ejemplos
Ktor Client es una potente, ligera y multiplataforma biblioteca para realizar peticiones HTTP en el lenguaje Kotlin. Desarrollada por JetBrains, forma parte del ecosistema Ktor y ofrece una API asíncrona basada en corrutinas para interactuar con servidores web. A diferencia de muchos otros clientes HTTP, Ktor Client está diseñado desde su origen para funcionar en múltiples plataformas: JVM, Android, iOS, macOS, Linux, Windows y JavaScript (a través de Kotlin/JS). Esto lo convierte en la elección ideal para desarrollar aplicaciones multiplataforma con Kotlin Multiplatform (KMP).
¿Para qué sirve Ktor Client? En el desarrollo moderno, prácticamente ninguna aplicación prescinde de la interacción con APIs remotas. Ya sea para cargar datos desde un servicio REST, enviar formularios, subir archivos o trabajar con WebSockets, un cliente HTTP es una herramienta fundamental. Ktor Client no solo ofrece las capacidades básicas de peticiones GET y POST, sino todo un ecosistema de plugins (o "motores") que permiten configurar serialización (JSON, XML, Protobuf), compresión, registro de actividad, autenticación, reintentos y mucho más. Su principal ventaja es la asincronía total basada en corrutinas de Kotlin, lo que garantiza un alto rendimiento y un código conciso sin callbacks.
La biblioteca se caracteriza por su arquitectura modular. Solo conectas los componentes que realmente necesita tu proyecto: el cliente base, el motor concreto (por ejemplo, OkHttp para Android/JVM o Darwin para iOS), el serializador y los plugins necesarios. Esto minimiza el tamaño de la aplicación final y evita conflictos de dependencias. Ktor Client se desarrolla activamente, cuenta con una excelente documentación y cuenta con el respaldo de la comunidad Kotlin.
Instalación
Ktor Client se distribuye a través del sistema de compilación Gradle (o Maven). Al no ser un paquete de Python, no se utiliza el comando pip install. A continuación, se indican las instrucciones precisas para añadir las dependencias en tu archivo build.gradle.kts.
Importante: Las versiones de las bibliotecas deben ser compatibles. Se recomienda utilizar la última versión estable del repositorio oficial de Maven Central. En el momento de redactar este artículo, la versión actual es 2.3.12.
// build.gradle.kts (Gradle Kotlin DSL)
// 1. Añade el repositorio (normalmente ya existe)
repositories {
mavenCentral()
}
// 2. Añade las dependencias en el bloque dependencies
dependencies {
// Cliente base (obligatorio)
implementation("io.ktor:ktor-client-core:2.3.12")
// Motor (Engine) - elige una de las opciones:
// Para JVM (usa Java HttpClient u OkHttp)
implementation("io.ktor:ktor-client-okhttp:2.3.12") // Recomendado para Android/JVM
// implementation("io.ktor:ktor-client-java:2.3.12") // Alternativa para JVM
// Para iOS/macOS (nativo Darwin)
// implementation("io.ktor:ktor-client-darwin:2.3.12")
// Para JavaScript
// implementation("io.ktor:ktor-client-js:2.3.12")
// Para Windows/Linux (Curl)
// implementation("io.ktor:ktor-client-curl:2.3.12")
// Plugins (opcionales, pero muy útiles):
// Serialización JSON (Gson o Kotlinx Serialization)
implementation("io.ktor:ktor-client-content-negotiation:2.3.12")
implementation("io.ktor:ktor-serialization-gson:2.3.12")
// o implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.12")
// Registro de actividad (logging)
implementation("io.ktor:ktor-client-logging:2.3.12")
// Para trabajar con WebSockets
// implementation("io.ktor:ktor-client-websockets:2.3.12")
}
Si usas Maven, las dependencias serán similares. Después de añadir las dependencias, sincroniza el proyecto (Sync Project with Gradle Files).
Inicio rápido: ejemplo mínimo funcional
Escribamos un programa muy sencillo que realice una petición GET a una API pública y muestre
También en la biblioteca
Rate Limiting en PHP: guía completa para limitar solicitudes
Biblioteca estándar de Java: revisión completa y ejemplos de código
Caching en Node.js: Redis y alternativas para acelerar aplicaciones
Trabajo con XML en Rust: bibliotecas quick-xml, roxmltree y serde_xml_rs
Firebase SDK para Swift: guía completa con ejemplos