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 — локальная установка не требуется.
Все уроки этого курса
- Retrofit и REST API
- Загрузка изображений с Coil
- Обработка ошибок и UX
- Push-уведомления
- WorkManager и фоновые задачи
- Публикация в Play Store