Ktorfit:Kotlin 基于 ktor 的 retrofit:多平台 HTTP 客户端库

Ktorfit:Kotlin 基于 ktor 的 retrofit:多平台 HTTP 客户端库

Ktorfit 是一个针对 Kotlin 多平台(Android、iOS、Js、Jvm、Linux)的 HTTP 客户端和 Kotlin 符号处理器,使用了 KSP 和 Ktor 客户端,受 Retrofit 启发而开发。

项目概述

Ktorfit 项目旨在提供一个适用于 Kotlin 多平台的 HTTP 客户端库,其设计灵感源自 Retrofit。该项目使用了 KSP 和 Ktor 客户端,提供了针对不同平台的支持,旨在简化网络请求的处理和管理。

项目支持

Ktorfit 支持多平台,包括 Android、iOS、Js、Jvm 和 Linux。该项目的多平台支持使得开发者可以更加便捷地处理网络请求,同时保持代码的一致性和可维护性。

如何使用

Ktorfit 提供了详细的文档,其中包括了项目的使用方法和示例。

安装 官方文档

(点击查看 示例 )

Android 项目:

Gradle 插件 ¶

添加 KSP 和 Ktorfit Gradle 插件

plugins {
    // ...
    id("com.google.devtools.ksp") version "1.9.22-1.0.16" // ksp
    id("org.jetbrains.kotlin.plugin.serialization") version "1.9.22"  // ks序列化库,用于序列化Json
    id("de.jensklingenberg.ktorfit") version "1.12.0" // ktorfit
}

接下来,将 Ktorfit KSP 插件添加到依赖。

val ktorfit = "1.12.0"
val ktor = "2.3.6"
val compose_ui_version = "1.5.1"
dependencies {
    // ...
    ksp("de.jensklingenberg.ktorfit:ktorfit-ksp:$ktorfit") // ktorfit ksp 依赖
    implementation("de.jensklingenberg.ktorfit:ktorfit-lib:$ktorfit") // ktorfit 依赖
    
    // 仅当使用 Kotlin 序列化时才需要
    implementation("io.ktor:ktor-client-serialization:$ktor") // ktor 依赖
    implementation("io.ktor:ktor-client-content-negotiation:$ktor") // ktor 依赖
    implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor") // ks 依赖
}

kotlin 多平台项目:

Gradle 插件 ¶

添加 KSP 和 Ktorfit Gradle 插件

plugins {
    // ...
    id("com.google.devtools.ksp") version "1.9.22-1.0.16"
    id("kotlinx-serialization")
    id("de.jensklingenberg.ktorfit") version "1.12.0"
}

接下来,将 Ktorfit KSP 插件添加到依赖。

val ktorVersion = "2.3.6"
val ktorfitVersion = "1.12.0"

kotlin {
    // ...
    sourceSets {
        // ...
        val commonMain by getting {
            dependencies {
                implementation("de.jensklingenberg.ktorfit:ktorfit-lib:$ktorfitVersion")
                //implementation("de.jensklingenberg.ktorfit:ktorfit-lib-light:$ktorfitVersion")
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")

                // 仅当使用 Kotlin 序列化时才需要
                implementation("io.ktor:ktor-client-serialization:$ktorVersion")
                implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
                implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
             }
        }
    }
}

dependencies {
    with("de.jensklingenberg.ktorfit:ktorfit-ksp:$ktorfitVersion") {
        add("kspCommonMainMetadata", this)
        add("kspJvm", this)
        add("kspJvmTest", this)
        add("kspAndroid", this)
        add("kspAndroidTest", this)
        add("kspIosX64", this)
        add("kspIosX64Test", this)
        add("kspIosArm64", this)
        add("kspIosArm64Test", this)
        add("kspIosSimulatorArm64", this)
        add("kspIosSimulatorArm64Test", this)
        add("kspMacosX64", this)
        add("kspMacosX64Test", this)
        add("kspJs", this)
        add("kspJsTest", this)
    }
}

使用方法

像 Retrofit 一样

package com.wilinz.mapdraw.data.api

import com.wilinz.mapdraw.data.model.OsmSearchResponse
import de.jensklingenberg.ktorfit.http.GET
import de.jensklingenberg.ktorfit.http.Query

interface OsmMapApi {
    @GET("https://nominatim.openstreetmap.org/search")
    suspend fun search(
        @Query("q") q: String,
        @Query("format") format: String = "json",
        @Query("addressdetails") isAddressDetails: Int = 1,
        @Query("limit") limit: Int = 5,
        @Query("polygon_kml") polygonKml: Int = 0
    ): OsmSearchResponse
}
package com.wilinz.mapdraw.data

import com.wilinz.mapdraw.data.api.OsmMapApi
import de.jensklingenberg.ktorfit.Ktorfit
import io.ktor.client.HttpClient
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
import io.ktor.serialization.kotlinx.json.json
import kotlinx.serialization.json.Json

object Network {
    val myClient = HttpClient {
        install(ContentNegotiation) {
            json(Json { isLenient = true; ignoreUnknownKeys = true })
        }
    }
    val ktorfit = Ktorfit.Builder().httpClient(myClient).build()

    val osmMapApi = ktorfit.create<OsmMapApi>()
}
val result = osmMapApi.search(q = "桂林")
Ktor ¶

Ktorfit 基于 Ktor Client 。 不需要为默认客户端添加额外的依赖项。 仅当你想使用 Ktor 插件进行序列化之类的事情时,需要添加依赖项,并且它们需要兼容对应版本

还可以使用 “de.jensklingenberg.ktorfit:ktorfit-lib-light”, 这只会添加 Ktor 客户端核心依赖项,而不是客户端的平台依赖项。 这将使您能够更好地控制所使用的客户端,但您必须自己添加它们。 https://ktor.io/docs/http-client-engines.html 其他一切与“ktorfit-lib”相同

兼容性

Ktorfit 的兼容性信息可在此处查看。

项目结构

  • compiler plugin - 编译器插件的源代码模块
  • ktorfit-annotations - Ktorfit 的注解模块
  • ktorfit-ksp - KSP 插件的源代码模块
  • ktorfit-lib-core - Ktorfit 核心库的源代码模块
  • ktorfit-lib - ktorfit-lib-core + 特定平台客户端的依赖
  • sandbox - 用于尝试各种功能的实验性测试模块
  • example - 包含使用 Ktorfit 的示例项目
  • docs - 包含 GitHub 页面的源代码

你可能感兴趣的:(kotlin,retrofit,http)