Лабораторія коду | Уроки програмного забезпечення

Підручники з програмного забезпечення => Kotlin => Тема розпоата: Ukzay від ер. 21, 2026, 11:02 AM

Нава: Мережеві операції з Retrofit в Kotlin: Інтеграція REST API - 2026
Віправено: Ukzay від ер. 21, 2026, 11:02 AM
Retrofit в Kotlin є найпопулярнішою та найпотужнішою бібліотекою для взаємодії з REST API в проектах Android та загальних проектах Kotlin. Розроблений компанією Square, Retrofit дозволяє визначати HTTP-запити в типобезпечний, читабельний та стислий спосіб – особливо з інтеграцією Coroutines асинхронні виклики стають дуже чистими. Конвертери, такі як Gson або Moshi, автоматично перетворюють JSON на класи даних Kotlin. Станом на 2026 рік Retrofit все ще є стандартною бібліотекою мереж для Android: хоча він конкурує з клієнтом Ktor, декларативний API Retrofit, інтеграція з OkHttp та широка екосистема (інтерсептори, автентифікація) роблять його лідером. У поєднанні з Jetpack Compose створювати сучасні, реактивні додатки дуже легко.

У Google пошуки "Kotlin Retrofit", "Retrofit Coroutines", "Retrofit Android tutorial", "Retrofit Gson" є одними з найбільш об'ємних тем щодо мереж Android в Україні та світі. Добре розуміти Retrofit необхідно для реальних застосунків (новинний додаток, електронна комерція, клієнт соціальних мереж) для споживання API – набагато ефективніше та з меншою кількістю помилок, ніж ручний HttpURLConnection або Volley.

Чому варто вивчати Retrofit? (Перспектива 2026 року)

Встановлення
У проєкті Android Studio (ідеально для продовження проєкту з Compose):

// build.gradle.kts (Module level):
implementation("com.squareup.retrofit2:retrofit:2.11.0") // Güncel sürüm 2026
implementation("com.squareup.retrofit2:converter-gson:2.11.0") // JSON için
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") // Logging

Coroutines вже є, додайте якщо потрібно.

Основне використання Retrofit

data class Haber(
    val title: String,
    val description: String?,
    val urlToImage: String?,
    val publishedAt: String
)

data class HaberResponse(
    val articles: List<Haber>
)


interface HaberApi {
    @GET("top-headlines")
    suspend fun getBasliklar(
        @Query("country") country: String = "tr",
        @Query("apiKey") apiKey: String
    ): HaberResponse
}


object RetrofitClient {
    private val logging = HttpLoggingInterceptor().apply {
        level = HttpLoggingInterceptor.Level.BODY
    }
    private val client = OkHttpClient.Builder()
        .addInterceptor(logging)
        .build()
    val api: HaberApi = Retrofit.Builder()
        .baseUrl("https://newsapi.org/v2/")
        .addConverterFactory(GsonConverterFactory.create())
        .client(client)
        .build()
        .create(HaberApi::class.java)
}


class HaberViewModel : ViewModel() {
    private val _haberler = mutableStateListOf<Haber>()
    val haberler: List<Haber> = _haberler

    private val _yukleniyor = mutableStateOf(false)
    val yukleniyor: State<Boolean> = _yukleniyor

    fun haberleriYukle() {
        viewModelScope.launch {
            _yukleniyor.value = true
            try {
                val response = RetrofitClient.api.getBasliklar(apiKey = "YOUR_API_KEY")
                _haberler.clear()
                _haberler.addAll(response.articles)
            } catch (e: Exception) {
                // Керування помилками (лог або стан)
            } finally {
                _yukleniyor.value = false
            }
        }
    }
}

Простий Проєкт: Новинний Додаток (Compose + Retrofit + Coroutines)
Повністю працюючий додаток зі списком заголовків новин – витягує дані з API та показує в LazyColumn (з зображеннями).

@Composable
fun HaberScreen(viewModel: HaberViewModel = viewModel()) {
    LaunchedEffect(Unit) {
        viewModel.haberleriYukle()
    }
    if (viewModel.yukleniyor) {
        Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
            CircularProgressIndicator()
        }
    } else {
        LazyColumn(modifier = Modifier.padding(16.dp)) {
            items(viewModel.haberler) { haber ->
                Card(modifier = Modifier.padding(8.dp).clickable {
                    // Відкрити URL (через Intent)
                }) {
                    Column(modifier = Modifier.padding(16.dp)) {
                        AsyncImage( // Завантаження зображення через бібліотеку Coil
                            model = haber.urlToImage,
                            contentDescription = null,
                            modifier = Modifier.fillMaxWidth().height(200.dp),
                            contentScale = ContentScale.Crop
                        )
                        Text(haber.title, style = MaterialTheme.typography.h6)
                        Text(haber.description ?: "", style = MaterialTheme.typography.body1)
                        Text(haber.publishedAt, style = MaterialTheme.typography.body2)
                    }
                }
            }
        }
    }
}


implementation("io.coil-kt:coil-compose:2.6.0")

setContent {
    MyAppTheme {
        HaberScreen()
    }
}

Запуск: Отримайте безкоштовний API-ключ з newsapi.org, додайте до ViewModel. При відкритті додатка завантажуються поточні заголовки новин з Туреччини (з зображеннями) – при кліку можна відкрити в браузері (додатковий Intent).

Пропозиції щодо розробки: Додайте пагінацію (@Query("page")), панель пошуку, стан помилок.

Просунуті теми та поради

Висновок та практичні пропозиції
Retrofit + Coroutines є золотим стандартом мереж Android – з цим посібником та проєктом новинного додатка ви зможете створити реальний додаток, що споживає API. Для практики:


З цим посібником ви почнете використовувати Retrofit на професійному рівні. Розробіть власний новинний додаток або залиште коментар для іншого проєкту API! У 2026 році Retrofit надасть вашим додаткам Android велику швидкість та надійність.