XHHttp一个http请求框架-使用指北

前言

在做项目的时候,用过一些http请求框架,例如:OkHttp3、Retrofit、RxEasyHttp等等
每个框架都有自己的特点和适用场景。在学习了反射和动态代理、阅读过Retrofit和RxEasyHttp的源码后,萌生了自己写一个http请求框架的想法,于是有了该项目:

https://github.com/maybesix/XHHttp

该项目通过接口的形式调用。
该项目使用kotlin+反射+动态代理的方式来实现http请求发起的前置处理,使用Okhttp3来尽情网络请求。

一、简单使用

首先要写一个接口,然后在伴生类里面定义一个方法

interface HttpRequest {
    companion object {
        fun instance(config: XHHttpConfig? = null): HttpRequest {
            return XHHttp.getInstance(HttpRequest::class.java, config)
        }
    }  
}

以下示例采用鸿洋的玩安卓提供的API
https://www.wanandroid.com/blog/show/2

使用@GET、@POST等注解来发起请求,注解内填写后续接口地址,接口内定义ObserverCallBack回调来实现请求结果的回调,,请求需要参数的则直接写在参数里面

interface HttpRequest {
    companion object {
        fun instance(config: XHHttpConfig? = null): HttpRequest {
            return XHHttp.getInstance(HttpRequest::class.java, config)
        }
    }

    @GET("wxarticle/chapters/json")
    fun getChapters(_callback: ObserverCallBack?)

    @POST("article/query/0/json")
    fun search(_callback: ObserverCallBack?, k: String = "kotlin")

}

然后使用的代码为

    HttpRequest.instance().getChapters(callbackOf{
        start { }//请求之前
        success {}//请求成功
        failed { data, error ->
        }//请求失败
        complete { }//请求完成
    })

其中,callbackOf为dsl语法,内置start、success、failed、complete方法。
start为开始请求之前调用的方法;请求结果为:success或者failed中的一个;请求结束以后,调用complete方法

二、使用复杂参数

参数的类型同时也支持Map

复杂参数的注解有

注解 标注位置 描述
@Path 接口的参数 用于动态替换接口方法上注解的url中的字段
@Param 接口的参数 用于标注改参数为类
@ParamRename 参数的类内部 用于标注参数类的某个属性的在构建url的时候的真实字段
@ParamIgnore 参数的类内部 用于忽略某个字段

@Path

如果动态替换请求地址的字段,就使用“{}”这个标志这个需要替换的字段,在参数里面使用@Path注解标注,注解的参数为需要替换的字符串内容,如下

interface HttpRequest {
    companion object {
        fun instance(config: XHHttpConfig? = null): HttpRequest {
            return XHHttp.getInstance(HttpRequest::class.java, config)
        }
    }

    @GET("article/list/{path}/json")
    fun getArticleJson(_callback: ObserverCallBack?, @Path("path") page: String)

}

使用如下

HttpRequest.instance().getArticleJson(
callbackOf {
    success {
        showResult(it)
    }
    failed { data, error ->

    }
},"0")

通过注解标注,“{path}”被替换成了“0”,最后的请求地址为

article/list/0/json

@Param

标注使用类作为参数,类里面的属性被自动解析为实际的参数

data class Author(
    @ParamRename("author")//重命名为author
    var name: String,
    @ParamIgnore()//忽略该字段
    var id: String
)

定义接口

interface HttpRequest {
    companion object {
        fun instance(config: XHHttpConfig? = null): HttpRequest {
            return XHHttp.getInstance(HttpRequest::class.java, config)
        }
    }
    @GET("article/list/0/json")
    fun getArticleByAuthorName(callBack: ObserverCallBack, @Param authorEntity: Author)

}

使用

HttpRequest.instance()
                .getArticleByAuthorName(
                    callbackOf { },
                    Author("鸿洋", "777")
                )

最后请求的地址就是以下内容

https://www.wanandroid.com/article/list/0/json?author=%E9%B8%BF%E6%B4%8B

你可能感兴趣的:(XHHttp一个http请求框架-使用指北)