
В этой записи блога я поделюсь своим опытом написания сетевого кода на Kotlin Multiplatform и тем, как мне удалось добиться его бесперебойной работы на всех платформах.
Сетевые библиотеки, такие как Retrofit и Ktor, отлично работают на JVM, но если вы хотите использовать тот же код на других платформах, таких как iOS, Android или в Интернете, вам нужно найти другое решение. Здесь на помощь приходит Kotlin Multiplatform.
Для создания независимого от платформы сетевого кода я использовал Ktor в качестве клиентской библиотеки HTTP, которая поддерживается на всех платформах. Я создал общий модуль для сетевого кода, который включает интерфейс API и его реализацию.
Вот пример интерфейса API:
// Shared module
expect interface ApiService {
suspend fun getPosts(): List<Post>
}
Ключевое слово expect указывает, что этот интерфейс будет реализован по-разному на каждой платформе. Например, на JVM это может выглядеть так:
// JVM implementation
actual class ApiServiceImpl(private val httpClient: HttpClient) : ApiService {
override suspend fun getPosts(): List<Post> {
val response: HttpResponse = httpClient.get("https://jsonplaceholder.typicode.com/posts")
return response.receive<List<Post>>()
}
}
А на iOS это будет выглядеть так:
// iOS implementation
actual class ApiServiceImpl(private val httpClientEngine: HttpClientEngine) : ApiService {
override suspend fun getPosts(): List<Post> {
val httpClient = HttpClient(httpClientEngine)
val response: HttpResponse = httpClient.get("https://jsonplaceholder.typicode.com/posts")
return response.receive<List<Post>>()
}
}
Как видите, реализация на каждой платформе разная, но API остается одинаковым.
Чтобы использовать API, вы можете просто создать экземпляр ApiService и вызвать его методы:
// Factory for creating the API service
object ApiServiceFactory {
fun create(): ApiService {
return ApiServiceImpl(HttpClient())
}
}
val apiService = ApiServiceFactory.create()
val posts = apiService.getPosts()
Используя Kotlin Multiplatform, я смог создать сетевой код, который одинаково работает на всех платформах, без необходимости писать код для конкретной платформы. Это не только экономит время, но и снижает вероятность появления ошибок, связанных с платформой.
В заключение, Kotlin Multiplatform — это мощный инструмент для создания независимого от платформы кода, который может быть особенно полезен при работе с сетевым кодом. Используя ключевые слова expect и actual, вы можете создать общий API, который без проблем работает на всех платформах.
проверьте обновление документации: https://kotlinlang.org/docs/multiplatform-connect-to-apis.html#generate-a-uuid