Работал ли с Retrofit

Ответ

Да, работал. Retrofit — популярная библиотека для работы с сетевыми запросами в Android. Она упрощает взаимодействие с REST API, преобразуя HTTP-запросы в Java/Kotlin-интерфейсы.

Пример:

interface ApiService {
    @GET("users/{id}")
    suspend fun getUser(@Path("id") userId: Int): User
}

val retrofit = Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build()

val api = retrofit.create(ApiService::class.java)
val user = api.getUser(1) // suspend-функция для корутин

Плюсы:

  • Удобный синтаксис (аннотации)
  • Поддержка корутин, RxJava, LiveData
  • Конвертация JSON в объекты (Gson, Moshi)
  • Возможность кастомизации (OkHttp Interceptors)

Работал с обработкой ошибок, кешированием, добавлением заголовков и мультипарт-запросами.

Ответ 18+ 🔞

А, Retrofit? Да, конечно, работал, куда ж без него. Это ж, бля, классика, как бутерброд с колбасой. Библиотека, которая из дикого крика в OkHttp превращает всё в красивые аннотации, чтобы не писать эти ебушки-воробушки с запросами руками.

Вот смотри, как это выглядит, простейший пример:

interface ApiService {
    @GET("users/{id}")
    suspend fun getUser(@Path("id") userId: Int): User
}

val retrofit = Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build()

val api = retrofit.create(ApiService::class.java)
val user = api.getUser(1) // suspend-функция для корутин

И в чём же его магия, спросишь ты? А вот в чём, ёпта:

  • Синтаксис — просто песня. Вместо того чтобы городить HttpUrlConnection или клеить строки запроса, ты пишешь интерфейс, как будто вызываешь методы у локального объекта. Аннотации @GET, @POST — красота, а не работа.
  • Поддержка всего, что душе угодно. Хочешь корутины — пожалуйста, suspend функции. Хочешь RxJava — возвращай Observable. LiveData? Без проблем. Не надо изобретать велосипед, всё уже прикручено.
  • Конвертация JSON в объекты — это вообще отдельный вид искусства. Кинул GsonConverterFactory или MoshiConverterFactory в билдер, и всё — твой JSON сам превращается в твой data-класс. Раньше бы это парсингом ручным заниматься, а теперь — ни хуя себе — одна строчка.
  • Кастомизация на любой вкус. Через OkHttp Interceptors можно любую дичь прикрутить: логирование запросов (чтобы видеть, что ты на сервер посылаешь, а то мало ли), автоматическое добавление заголовков авторизации, обработку ошибок глобально. Хочешь кеширование — тоже туда же.

Говоря про обработку ошибок — это отдельная история. Можно через Interceptors ловить коды ответов 400-е, 500-е и кидать свои кастомные исключения, чтобы не проверять в каждом вызове. С кешированием тоже игрался — настраивал политику через тот же OkHttp, чтобы не дергать сервер по каждому чиху. Заголовки, мультипарт-запросы (когда файлы надо отправить) — всё это было. Библиотека, в общем, доверия ебать ноль не вызывает, потому что проверена временем и работает как швейцарские часы, если, конечно, не накосячить с конфигурацией.