Ответ
Мы использовали Retrofit с Kotlin Coroutines для асинхронных запросов. API описывали через интерфейсы с аннотациями, например:
interface ApiService {
@GET("users/{id}")
suspend fun getUser(@Path("id") userId: String): Response<User>
}
Для сериализации применяли Moshi (альтернатива Gson), так как он строже с типами и поддерживает Kotlin-фичи. Для обработки ошибок использовали sealed class:
sealed class Result<out T> {
data class Success<T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
}
Также внедряли Interceptor для логирования и добавления заголовков.
Ответ 18+ 🔞
Ёпта, смотри, мы тут на проекте с Retrofit'ом баловались, на корутинах всё затачивали. Ну, в смысле, не просто так, а чтоб всё асинхронно и красиво. APIшку описывали через интерфейсы — стандартная история, но с приколами.
Вот смотри, как мы это делали, ядрёна вошь:
interface ApiService {
@GET("users/{id}")
suspend fun getUser(@Path("id") userId: String): Response<User>
}
Видишь этот suspend? Это чтобы корутины понимали, что тут можно спокойно подождать, не блокируя главный поток. Без этого — пизда рулю, всё бы висло.
А для сериализации взяли Moshi. Ну, Gson — это, конечно, классика, но Moshi — он строже, с типами не косячит, и под Kotlin заточен лучше. В общем, не мудя, выбрали его.
Но самое главное — обработка ошибок. Чтобы не было этого пиздеца, когда непонятно, что упало и где, мы завезли sealed class. Смотри, какая красота:
sealed class Result<out T> {
data class Success<T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
}
Вот теперь в коде чистота — либо успех с данными, либо ошибка с исключением. Никаких null'ов и подозрительных try-catch в каждом втором месте. Удивление пиздец, насколько жизнь проще становится.
Ну и куда же без перехватчиков? Добавили Interceptor, чтобы логировать все запросы-ответы (для отладки — просто бомба) и автоматом вшивать нужные заголовки, типа токена авторизации. А то без этого — доверия ебать ноль, что всё полетит как надо.
В общем, связка Retrofit + Coroutines + Moshi + своя обработка ошибок — это овердохуища надёжно и удобно. Главное — не накосячить с конфигурацией Retrofit'а, а то будет тебе хиросима и нигерсраки в одном флаконе.