0Pricing
Android Academy · Урок

Retrofit и REST API

Выполняйте HTTP-запросы с помощью Retrofit. Определяйте интерфейсы API, разбирайте JSON с помощью Gson/Moshi, обрабатывайте ответы и ошибки и интегрируйте всё с корутинами.

«Retrofit и REST API» — бесплатный урок Android Academy на CoddyKit. Это урок 1 из 6. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 6 уроков всего.

Что такое Retrofit?

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

  • Помечайте методы аннотациями @GET, @POST и другими
  • Автоматически преобразует ответы JSON в классы данных Kotlin
  • Нативная поддержка сопрограмм (suspend fun)

Добавление зависимостей

Добавьте Retrofit и преобразователь Gson в app/build.gradle:

// app/build.gradle
dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.11.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
}

// AndroidManifest.xml — add internet permission:
// <uses-permission android:name="android.permission.INTERNET" />

Определение интерфейса API

Создайте интерфейс Kotlin, описывающий конечные точки API:

import retrofit2.http.*

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

interface ApiService {

    @GET("posts")
    suspend fun getPosts(): List<Post>

    @GET("posts/{id}")
    suspend fun getPost(@Path("id") id: Int): Post

    @POST("posts")
    suspend fun createPost(@Body post: Post): Post

    @GET("posts")
    suspend fun getPostsByUser(@Query("userId") userId: Int): List<Post>
}

Создание экземпляра Retrofit

Создайте единственный экземпляр Retrofit — обычно внутри object или с помощью Hilt:

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

object RetrofitClient {
    private const val BASE_URL = "https://jsonplaceholder.typicode.com/"

    val api: ApiService by lazy {
        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(ApiService::class.java)
    }
}

Выполнение GET-запроса

Вызовите API из Repository с помощью сопрограмм Kotlin:

class PostRepository {
    private val api = RetrofitClient.api

    suspend fun getPosts(): List<Post> {
        return api.getPosts()  // Retrofit handles threading for you
    }

    suspend fun getPost(id: Int): Post {
        return api.getPost(id)
    }
}

// In ViewModel:
fun loadPosts() {
    viewModelScope.launch {
        try {
            val posts = withContext(Dispatchers.IO) {
                repository.getPosts()
            }
            _posts.value = posts
        } catch (e: Exception) {
            _error.value = "Network error: ${e.message}"
        }
    }
}

Сопоставление JSON с помощью Gson

Gson автоматически преобразует JSON в классы данных Kotlin. Имена полей должны совпадать с ключами JSON, иначе используйте @SerializedName:

import com.google.gson.annotations.SerializedName

data class User(
    val id: Int,
    val name: String,
    val email: String,
    @SerializedName("phone_number")  // JSON key is 'phone_number'
    val phoneNumber: String,
    @SerializedName("created_at")
    val createdAt: String
)

POST-запрос с телом

Отправляйте данные на сервер с помощью @POST и @Body:

// API interface:
@POST("users")
suspend fun createUser(@Body user: User): User

// In Repository:
suspend fun createUser(name: String, email: String): User {
    val newUser = User(id = 0, name = name, email = email, phoneNumber = "", createdAt = "")
    return api.createUser(newUser)
}

// In ViewModel:
fun registerUser(name: String, email: String) {
    viewModelScope.launch {
        val user = withContext(Dispatchers.IO) {
            repo.createUser(name, email)
        }
        _registeredUser.value = user
    }
}

Заголовки и аутентификация

Добавляйте заголовки ко всем запросам с помощью перехватчика OkHttp:

import okhttp3.OkHttpClient
import okhttp3.Interceptor

val authClient = OkHttpClient.Builder()
    .addInterceptor { chain ->
        val request = chain.request().newBuilder()
            .addHeader("Authorization", "Bearer $token")
            .addHeader("Accept", "application/json")
            .build()
        chain.proceed(request)
    }
    .build()

val retrofit = Retrofit.Builder()
    .baseUrl(BASE_URL)
    .client(authClient)  // use our authenticated client
    .addConverterFactory(GsonConverterFactory.create())
    .build()

Обработка ошибок HTTP

Успешный HTTP-ответ (200–299) возвращает значение. Ответы с ошибками (4xx, 5xx) вызывают HttpException. Всегда обрабатывайте оба случая:

  • HttpException — сервер вернул код ответа с ошибкой
  • IOException — отсутствует сетевое соединение

Быстрая проверка

Какая аннотация Retrofit сопоставляет параметр метода с сегментом пути URL, например /posts/{id}?

Повторение: Retrofit и API

Теперь Вы умеете получать данные из любого REST API:

  • Опишите API с помощью интерфейса Kotlin и аннотаций (@GET, @POST, @Path, @Query)
  • Создайте экземпляр Retrofit с базовым URL и преобразователем Gson
  • Вызывайте приостанавливаемые функции из сопрограммы в ViewModel
  • Автоматически преобразуйте JSON → классы данных Kotlin
  • Обрабатывайте HttpException и IOException

Далее: отображение сетевых изображений с помощью Coil.

Часто задаваемые вопросы

Урок «Retrofit и REST API» бесплатный?

Да — полный текст урока «Retrofit и REST API» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 6 уроков всего.

Чему я научусь в уроке «Retrofit и REST API»?

Выполняйте HTTP-запросы с помощью Retrofit. Определяйте интерфейсы API, разбирайте JSON с помощью Gson/Moshi, обрабатывайте ответы и ошибки и интегрируйте всё с корутинами. Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Android Academy?

Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 6.

Сколько времени занимает урок «Retrofit и REST API»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Android Academy?

Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Retrofit и REST API
  2. Загрузка изображений с Coil
  3. Обработка ошибок и UX
  4. Push-уведомления
  5. WorkManager и фоновые задачи
  6. Публикация в Play Store
← Назад к Android Academy