Kotlin跨平台的网络请求框架-跨平台的Retrofit

14 篇文章 0 订阅
12 篇文章 0 订阅

前言

一般安卓开发中网络请求框架都是使用OkHttp+Retrofit,但其只能应用于jvm平台上

而Kotlin可用于jvm,js,native

因此一个Kotlin跨平台的网络请求框架必不可少

而ktor-client是Kotlin官方提供的网络请求框架,可以跨平台的进行网络请求(官网)
与之对应的还有ktor-server可以用来写服务器端(但这不是这篇文章的重点)

但ktor-client使用起来还是稍微有些麻烦,所以我们可以模仿Retrofit开发一个更方便使用的跨平台网络请求框架(单平台也可以使用)

也就是接下来的主角:懒人Http框架,地址: LazyPeopleHttp · GitHub

其不仅比Retrofit使用更方便,而且性能更高(因为用编译时替代了运行时反射)

正文

//下面代码相当于: https://xxx/getUser?userId=$userId
suspend fun getUser(userId: Int): User
或
fun getUser(userId: Int): Call<User>

//如果使用Compose可以这样用:
val user by remember { hf.getUser(0).toState() }
Text("UserName=${user?.name}")

使用方式

Step 1.添加依赖:

  • 如果是单平台,在app模块目录内的build.gradle.kts内添加
plugins {
    ...
    id("com.google.devtools.ksp") version "1.8.20-1.0.10"//this,前面的1.8.20对应你的kotlin版本,更多版本参考: https://github.com/google/ksp/releases
}

dependencies {
    ...
    implementation("io.github.ltttttttttttt:LazyPeopleHttp-lib:1.0.9")//最新版本可以看github地址
    ksp("io.github.ltttttttttttt:LazyPeopleHttp:1.0.9")
}
  • 如果是多平台,在common模块目录内的build.gradle.kts内添加
plugins {
    ...
    id("com.google.devtools.ksp") version "1.8.20-1.0.10"//this,前面的1.8.20对应你的kotlin版本,更多版本参考: https://github.com/google/ksp/releases
}

...
val commonMain by getting {
    dependencies {
        ...
        api("io.github.ltttttttttttt:LazyPeopleHttp-lib:1.0.9")
    }
}

...
dependencies {
    add("kspCommonMainMetadata", "io.github.ltttttttttttt:LazyPeopleHttp:1.0.9")
}
  • 如果你使用的ksp版本小于1.0.9则需要以下配置:

ksp配置

Step 2.接口声明:

@LazyPeopleHttpService
interface HttpFunctions {
    //标准post请求声明
    @POST("post/postB")
    fun postB(@Field("name") t: String): Call<UserBean>

    //懒人post请求声明,会把方法名当做url,其下划线会转换为斜杠
    fun post_postC(name: String): Call<String>

    //suspend post请求声明
    suspend fun post_postA(t: String): String

    //标准get请求声明
    @GET("get/getA")
    fun getA(@Query("t") t2: String): Call<String>

    //懒人get请求声明
    fun get_getB(name: String): Call<UserBean>

    //suspend get请求声明
    suspend fun suspendGetB(name: String): UserBean

    //添加静态的请求头
    @Header("aaa", "bbb")
    fun post_checkHeader(): Call<String?>

    //配置动态的url
    @GET("get/getD/{type}")
    fun getD(@Url("type") url: String): Call<String?>

    //可以声明具体函数,此时不会生成额外的方法
    fun ccc(): Int = 0
}

Step 3.接口使用:

//配置ktor的client
private val client = HttpClient {
    defaultRequest {
        //配置baseUrl
        url("http://127.0.0.1:666/")
    }
}
private val config = LazyPeopleHttpConfig(client)
//创建请求接口的实现类
private val hf = HttpFunctions::class.createService(config)

//使用接口的实现类
hf.postB("123").enqueue()//回调异步请求
hf.suspendGetB("111")//协程异步请求
val data by remember { hf.get().toState() }//返回响应式的State,适用于Compose

Step 4.自定义配置:

/*
 * 当前LazyPeopleHttpService类全局配置
 * [client]ktor请求客户端
 * [serializer]序列化器
 * [encryptor]加解密器
 * [defaultRequestMethod]默认请求方式(不使用注解的方法)
 * [onSuspendError]suspend函数抛出异常时调用
 * [onRequest]成功构造了请求,但发送请求之前调用
 * [onResponse]请求之后调用
 */
class LazyPeopleHttpConfig(...)

//单独修改一个接口的配置
hf.postB("123").config {
    //this is HttpRequestBuilder
}.enqueue()

ksp {
    //开启运行时配置获取所有注解的功能,不开启时调用[RequestInfo#functionAnnotations]始终返回null
    //arg("getFunAnnotationsWithLazyPeopleHttp", "true")
    //你甚至可以修改创建Call的方法,来返回自定义的Call
    //arg("createCallFunNameWithLazyPeopleHttp", "CallAdapter.createCall2")
}

对Kotlin或KMP感兴趣的同学可以进Q群 101786950

如果这篇文章对您有帮助的话

可以扫码请我喝瓶饮料或咖啡(如果对什么比较感兴趣可以在备注里写出来)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin是一种基于JVM的静态类型编程语言,可以与Java无缝地进行交互。Retrofit是一个用于构建网络请求框架的库,结合使用KotlinRetrofit可以更加高效地开发网络应用。 使用KotlinRetrofit搭建网络框架的步骤包括: 1. 添加依赖:首先需要在项目中添加KotlinRetrofit的依赖。在项目的build.gradle文件中,添加以下依赖: ```kotlin implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.x.x' // Kotlin标准库依赖 implementation 'com.squareup.retrofit2:retrofit:2.x.x' // Retrofit依赖 ``` 2. 创建API接口:使用Kotlin创建一个包含网络请求接口方法的API接口。在这里可以定义各种需要的请求方式(GET、POST等),以及请求参数和返回数据的定义。例如: ```kotlin interface ApiService { @GET("path/to/api") suspend fun getData(): Response<Data> } ``` 3. 创建Retrofit实例:使用Retrofit的Builder模式创建一个Retrofit实例,并进行必要的配置,如baseUrl、Gson解析器等。例如: ```kotlin val retrofit = Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build() ``` 4. 创建API服务实例:使用刚才创建的Retrofit实例,调用create()方法创建一个API服务实例。例如: ```kotlin val apiService = retrofit.create(ApiService::class.java) ``` 5. 发起网络请求:使用API服务实例来发起网络请求,可以通过调用接口方法来发起对应的网络请求。例如: ```kotlin CoroutineScope(Dispatchers.IO).launch { try { val response = apiService.getData() if (response.isSuccessful) { val data = response.body() // 在这里处理返回的数据 } else { // 网络请求失败 } } catch (e: Exception) { // 发生异常 } } ``` 通过以上步骤,我们就可以使用KotlinRetrofit搭建一个简单的网络框架,实现网络请求的发送和数据的解析。Kotlin的语法简洁且易于理解,Retrofit提供了方便的API接口定义和网络请求的封装,这让我们能够更加高效地进行网络开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值