В этой записи блога я поделюсь своим опытом написания сетевого кода на 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