美文网首页
XHHttp一个http请求框架-使用指北

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

作者: MaybeSix | 来源:发表于2020-05-03 11:50 被阅读0次

    前言

    在做项目的时候,用过一些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<String>{
            start { }//请求之前
            success {}//请求成功
            failed { data, error ->
            }//请求失败
            complete { }//请求完成
        })
    

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

    二、使用复杂参数

    参数的类型同时也支持Map<String,String>

    复杂参数的注解有

    注解 标注位置 描述
    @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<String> {
        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<String> { },
                        Author("鸿洋", "777")
                    )
    

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

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

    相关文章

      网友评论

          本文标题:XHHttp一个http请求框架-使用指北

          本文链接:https://www.haomeiwen.com/subject/tdqdghtx.html