
Facilitates using a specific web framework like Retrofit, streamlining HTTP client implementation with automatic code generation. Utilizes annotations and plugins to simplify API integration.
use ktor like retrofit.
Add the dependency in your common module's commonMain sourceSet
plugins {
kotlin("multiplatform")
id("com.google.devtools.ksp").version("$ksp_version")
// ...
}
kotlin {
// ...
sourceSets {
dependencies {
api("io.github.qdsfdhvh:ktor-fit-annotation:$ktorfit_version")
}
}
}
dependencies {
// add("kspCommonMainMetadata", "io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
add("kspJvm", "io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
// add("kspMacosX64", "io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
// add("kspIosX64", "io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
// add("kspJs","io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
//...
}You can create a kotlin expect class, ksp will generate the actual class.
@Suppress("NO_ACTUAL_FOR_EXPECT")
@GenerateApi
expect class TestService(client: HttpClient) : TestOtherApi1, TestOtherApi2 {
@GET("get/{id}")
suspend fun getData(@Path("id") id: String, @Query("name") name: String): String
}
interface TestOtherApi1 {
@GET("get1/{id}")
suspend fun getOtherData1(): String
}
interface TestOtherApi2 {
@GET("get2/{id}")
suspend fun getOtherData2(): String
}And then create api:
val client = HttpClient {
defaultRequest {
url("https://example.api/")
}
}
val api = TestService(client)This way is still experimental:
plugins {
id("io.github.qdsfdhvh.ktor-fit-plugin") version $ktorfit_version
}@GenerateApi
interface TestService {
//...
}ksp will auto generate code like:
class _TestServiceImpl(private val client: HttpClient) : TestService {
//...
}and kcp will auto generate code like:
interface TestService {
//...
companion object {
fun create(client: HttpClient): TestService {
return _TestServiceImpl(client)
}
}
}so, you can use like this:
val client = HttpClient {
defaultRequest {
url("https://example.api/")
}
}
val api = TestService.create(client)however, at the moment you need the ktor-fit-extensions plugin to get the IDE to prompt for the create(client) function.
use ktor like retrofit.
Add the dependency in your common module's commonMain sourceSet
plugins {
kotlin("multiplatform")
id("com.google.devtools.ksp").version("$ksp_version")
// ...
}
kotlin {
// ...
sourceSets {
dependencies {
api("io.github.qdsfdhvh:ktor-fit-annotation:$ktorfit_version")
}
}
}
dependencies {
// add("kspCommonMainMetadata", "io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
add("kspJvm", "io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
// add("kspMacosX64", "io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
// add("kspIosX64", "io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
// add("kspJs","io.github.qdsfdhvh:ktor-fit-ksp:$ktorfit_version")
//...
}You can create a kotlin expect class, ksp will generate the actual class.
@Suppress("NO_ACTUAL_FOR_EXPECT")
@GenerateApi
expect class TestService(client: HttpClient) : TestOtherApi1, TestOtherApi2 {
@GET("get/{id}")
suspend fun getData(@Path("id") id: String, @Query("name") name: String): String
}
interface TestOtherApi1 {
@GET("get1/{id}")
suspend fun getOtherData1(): String
}
interface TestOtherApi2 {
@GET("get2/{id}")
suspend fun getOtherData2(): String
}And then create api:
val client = HttpClient {
defaultRequest {
url("https://example.api/")
}
}
val api = TestService(client)This way is still experimental:
plugins {
id("io.github.qdsfdhvh.ktor-fit-plugin") version $ktorfit_version
}@GenerateApi
interface TestService {
//...
}ksp will auto generate code like:
class _TestServiceImpl(private val client: HttpClient) : TestService {
//...
}and kcp will auto generate code like:
interface TestService {
//...
companion object {
fun create(client: HttpClient): TestService {
return _TestServiceImpl(client)
}
}
}so, you can use like this:
val client = HttpClient {
defaultRequest {
url("https://example.api/")
}
}
val api = TestService.create(client)however, at the moment you need the ktor-fit-extensions plugin to get the IDE to prompt for the create(client) function.