Cómo usar Ktor Client en Android

Juan Guillermo Gómez Torres
3 min readFeb 9, 2021
ktor

Ktor es un framework asíncrono para crear microservicios y aplicaciones web, es open source desarrollado con Kotlin por Jetbrains. Es sencillo, fácil de instalar y de usar, extensible por si deseas agregar un paso al pipeline de ejecución, es asíncrono el cual permite escalar en solicitudes gracias a que usa corrutinas y además es multiplataforma una característica relevante en la cual nos enfocaremos.

Si si si, ¡¡Ktor es multiplataforma!! ¿Cómo así??… Pues que podemos desplegar donde deseemos las aplicaciones que corren en servidor y también se puede usar la biblioteca de Ktor cliente para consumir microservicios desde Android, iOS o JS.

Así que te mostraré cuáles dependencias agregar, cómo crear la instancia del cliente y cómo llamar una API.

Primero agrega las dependencias para la configuración y creación de la instancia del Ktor cliente.

Tenemos cuatro dependencias, la primera es el engine el cual se encarga de procesar las solicitudes de red, en este caso usamos la de android. La segunda dependencia es usada para definir la configuración de serialización y deserialización de JSON y es la recomendada para proyectos multiplataforma. La tercera dependencia es kotlinx.serialization que se usa para la serelialización de entidades. Y la cuarta dependencia es para configurar los logs de los requests HTTP.

Ahora debemos agregar el plugin de kotlinx.serialization

Ahora sí configuremos el engine y creemos la instancia cliente

Dependiendo del engine (Android, Apache, OKHttp y otros) podrías tener diferentes propiedades. En este ejemplo hicimos lo siguiente:

  • Primero configuramos el serializador / deserializador JSON, asignamos como serializer a kotlinx.serialization y agregamos alguna configuración. Dentro del engine también definimos tiempos de timeout.
  • Segundo configuramos el logging para crear logs de las solicitudes HTTP.
  • Tercero configuramos un observador que registrará todas los estados de las respuestas.
  • Por último podemos definir valores por default para cada llamado HTTP, en este caso definimos unas propiedades en el header que iran en todas las peticiones.

Listo!! nuestra configuración e instancia. Esto se hace una sola vez y ahora sí podemos hacer nuestras peticiones HTTP.

Definimos nuestra entidad:

Y luego el UserApi:

El repositorio:

Y nuestro método de extensión para el manejo de las excepciones:

Probando el Cliente Ktor

Para realizar pruebas unitarias a los métodos que usan el cliente de ktor deberías usar la clase MockEngine brindada por el framework que permite definir una respuesta con el contenido requerido.

Primero se crea una instancia de MockEngine y luego se pasa como parámetro a la clase de HttpClient.

Creando un mock para pruebas unitarias de métodos que usan el cliente de ktor

Listo!! Hemos configurado, creado el cliente y realizado solicitudes a un API con Ktor. Lo positivo es que es algo sencillo de implementar, usa corrutinas internamente, es multiplataforma, no usa anotaciones y tiene variedad de opciones de configuración, según el caso de uso y requisitos. Una desventaja puede ser que es un poco más verboso al configurar y usar que otras alternativas.

Espero te sea útil, recuerda compartir este artículo y un comentario es siempre bienvenido.

Bonus

Quieres aprender más sobre ktor?, revisa este workshop en mi canal.

--

--

Juan Guillermo Gómez Torres

Tech Lead in Wordbox. @GDGCali Founder. @DevHackCali Founder. Firebase & GCPcloud & Kotlin & ODML @GoogleDevExpert . Android lover.