Universidad del Quindío
Programa de Ingeniería de Sistemas y Computación
Título: Retrofit y Comunicación con APIs REST
Docente: Carlos Andrés Florez V.
En el desarrollo de aplicaciones móviles, es común que necesitemos comunicarnos con servicios web para obtener o enviar datos. Una forma popular de hacerlo en Android es mediante el uso de Retrofit, una biblioteca que facilita la interacción con APIs RESTful.
Retrofit es una biblioteca de cliente HTTP para Android y Java desarrollada por Square. Proporciona una forma sencilla y eficiente de consumir APIs RESTful al convertir las llamadas HTTP en interfaces de Java/Kotlin. Retrofit maneja automáticamente la serialización y deserialización de datos, lo que simplifica el proceso de comunicación con servicios web.
La documentación oficial de Retrofit se puede encontrar en el siguiente enlace: Retrofit.
Aunque existen diversas bibliotecas para realizar solicitudes HTTP en Android, como Volley y OkHttp, Retrofit se distingue por su facilidad de uso y por su estrecha integración con bibliotecas de serialización como Gson y Moshi. Una de sus principales ventajas es la posibilidad de definir las solicitudes HTTP mediante anotaciones, lo que permite escribir un código más declarativo, legible y fácil de mantener. Estas características hacen de Retrofit una opción especialmente adecuada para el consumo de APIs REST en aplicaciones Android modernas.
En esta tabla se comparan algunas características clave de Retrofit con otras bibliotecas populares:
| Característica | Retrofit | Volley | OkHttp |
|---|---|---|---|
| Nivel de abstracción | Alto | Medio | Bajo |
| Propósito principal | Consumo de APIs REST | Gestión de solicitudes HTTP y cache | Cliente HTTP |
| Uso de anotaciones | Sí | No | No |
| Soporte para APIs REST | Sí (orientado a REST) | Sí | Sí (manual) |
| Serialización de datos | Mediante conversores (Gson, Moshi, etc.) | Manual | Manual |
| Integración directa con Gson | Sí (converter) | No | No |
| Manejo de concurrencia | Automático (con coroutines, RxJava, etc.) | Automático | Manual |
| Manejo de cache | No (requiere configuración adicional) | Sí (integrado) | Sí (configurable) |
| Facilidad de uso | Alta | Media | Baja |
| Uso típico | Apps modernas basadas en APIs REST | Apps con muchas peticiones pequeñas | Base para otras bibliotecas |
Podemos decir que Retrofit abstrae a OkHttp para facilitar el consumo de servicios REST.
A continuación, se presenta un ejemplo práctico de cómo utilizar Retrofit para consumir una API REST en una aplicación Android.
Primero, agregamos las siguientes líneas en el archivo libs.versions.toml:
[versions]
retrofit = "3.0.0"
[libraries]
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
Y luego, en el archivo build.gradle.kts del módulo de la aplicación, agregamos las dependencias:
dependencies {
implementation(libs.retrofit)
implementation(libs.converter.gson)
}
Aunque en este ejemplo utilizamos Gson como convertidor, Retrofit es compatible con otros convertidores como Moshi, Jackson o Protobuf, lo que permite a los desarrolladores elegir la opción que mejor se adapte a sus necesidades.
Creamos una interfaz que defina los endpoints de la API utilizando anotaciones de Retrofit.
interface ApiService {
@GET("users")
suspend fun getUsers(): List<User>
}
En esta interfaz, definimos un método getUsers que realiza una solicitud GET al endpoint users y devuelve una lista de objetos User. El uso de la palabra clave suspend indica que esta función es una función de corrutina, lo que permite realizar operaciones asíncronas de manera más sencilla.
Así como usamos @GET para solicitudes GET, Retrofit también proporciona otras anotaciones como @POST, @PUT, @DELETE, entre otras, para manejar diferentes tipos de solicitudes HTTP.
Configuramos Retrofit para crear una instancia del cliente API.
val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com/") // Aquí va la URL base de la API
.addConverterFactory(GsonConverterFactory.create()) // Usamos Gson para la serialización
.build()
val apiService = retrofit.create(ApiService::class.java)
Utilizamos la instancia de apiService para realizar solicitudes a la API.
// Se lanza una corrutina para realizar la solicitud de manera asíncrona
GlobalScope.launch {
val users = apiService.getUsers()
users.forEach { user ->
Log.d("User", "Name: ${user.name}, Age: ${user.age}")
}
}
Este es un ejemplo básico de cómo utilizar Retrofit para consumir una API REST en una aplicación Android. En un entorno de producción, es recomendable manejar los errores y las respuestas de manera más robusta, así como utilizar un enfoque más estructurado para la gestión de corrutinas, como ViewModel y StateFlow.
Creamos una clase de datos que represente la estructura de los datos recibidos de la API.
data class User(
val id: Int,
val name: String,
val age: Int
)
Retrofit es una herramienta poderosa y fácil de usar para consumir APIs RESTful en aplicaciones Android. Su integración con bibliotecas de serialización como Gson facilita el manejo de datos, y su enfoque basado en anotaciones hace que el código sea limpio y mantenible. Al utilizar Retrofit, los desarrolladores pueden centrarse en la lógica de la aplicación sin preocuparse por los detalles complejos de las solicitudes HTTP.