Retrofit para Kotlin: guía completa con ejemplos

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

¿Qué es Retrofit y para qué sirve?

\n\n

Retrofit es un cliente HTTP con seguridad de tipos para Java y Kotlin, desarrollado por la empresa Square. Es una de las bibliotecas más populares para trabajar con APIs REST en el ecosistema Android. Retrofit permite a los desarrolladores realizar solicitudes HTTP a servidores remotos de forma fácil y elegante, transformando automáticamente las respuestas JSON en objetos Kotlin y viceversa.

\n\n

¿Para qué sirve Retrofit?

\n
    \n
  • Simplificación del trabajo con APIs: En lugar de escribir código extenso con HttpURLConnection u OkHttp, usted define una interfaz con anotaciones y Retrofit genera la implementación automáticamente.
  • \n
  • Serialización/Deserialización automática: Gracias a la integración con convertidores (Gson, Moshi, Kotlinx Serialization), Retrofit transforma automáticamente JSON en objetos Kotlin.
  • \n
  • Soporte para varios métodos HTTP: GET, POST, PUT, DELETE, PATCH, HEAD y OPTIONS.
  • \n
  • Gestión de cabeceras y parámetros: Fácil añadir cabeceras dinámicas o estáticas, parámetros query y parámetros path.
  • \n
  • Asincronía: Soporte para corrutinas Kotlin (funciones suspend) e interfaces Callback.
  • \n
  • Integración con OkHttp: Retrofit utiliza OkHttp como motor HTTP, lo que brinda acceso a potentes capacidades de interceptación de solicitudes (interceptors).
  • \n
\n\n

Retrofit es ideal para aplicaciones Android que interactúan con servicios web RESTful: desde aplicaciones meteorológicas simples hasta redes sociales complejas.

\n\n

Instalación de Retrofit en un proyecto Kotlin

\n\n

A diferencia de Python (donde se usa pip), en proyectos Kotlin/Android las dependencias se gestionan a través de Gradle. Agregue las siguientes líneas al archivo build.gradle.kts (o build.gradle) de su módulo (generalmente app):

\n\n
// build.gradle.kts (Module :app)\ndependencies {\n    // Biblioteca principal de Retrofit\n    implementation("com.squareup.retrofit2:retrofit:2.9.0")\n    \n    // Convertidor para trabajar con JSON (Gson)\n    implementation("com.squareup.retrofit2:converter-gson:2.9.0")\n    \n    // Convertidor alternativo (Moshi)\n    // implementation("com.squareup.retrofit2:converter-moshi:2.9.0")\n    \n    // Para soporte de corrutinas (funciones suspend)\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")\n    \n    // OkHttp (generalmente ya incluido, pero se puede agregar explícitamente)\n    implementation("com.squareup.okhttp3:okhttp:4.12.0")\n    implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")\n}\n
\n\n

Importante: Después de agregar las dependencias, presione "Sync Now" en Android Studio para descargar las bibliotecas.

\n\n

Inicio rápido: ejemplo de código

\n\n

Vamos a crear una aplicación simple que obtenga una lista de publicaciones desde JSONPlaceholder (una API de prueba gratuita).

\n\n

Paso 1: Cree una clase data para la respuesta

\n\n
data class Post(\n    val userId: Int,\n    val id: Int,\n    val title: String,\n    val body: String\n)\n
\n\n

Paso 2: Defina la interfaz de la API

\n\n
interface ApiService {\n    @GET("posts")\n    suspend fun getPosts(): List<Post>\n    \n    @GET("posts/{id}")\n    suspend fun getPostById(@Path("id") postId: Int): Post\n}\n
\n\n

Paso 3: Cree el cliente Retrofit

\n\n
object RetrofitClient {\n    private const val BASE_URL = "https://jsonplaceholder.typicode.com/"\n    \n    val instance: ApiService by lazy {\n        Retrofit.Builder()\n            .baseUrl(BASE_URL)\n            .addConverterFactory(GsonConverterFactory.create())\n            .build()\n            .create(ApiService::class.java)\n    }\n}\n
\n\n

Paso 4: Úselo en una Activity o ViewModel

\n\n
class MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n                    

Recommendations