Ответ
Мы использовали 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 для логирования и добавления заголовков.