Renovate
Renovate – preview
对象式Http网络请求框架
背景及面向对象思想
用过Retrofit的知道,Retrofit是一个将http请求,表现成高级语言的接口(Interface),抽象成API的规范的优秀思想的Http框架,只暴露出了我们业务中的数据模型和操作方法。
然而什么是面向对象?Renovate如何运用这个思想?
“面向对象”是专指在程序设计中采用封装、继承、多态和抽象等设计方法。百度百科
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。百度百科
Renovate重新定义了Http请求的方式,抽象出Http的请求为对象,采用了基于对象的注解和配置,对Http接口进行请求
Renovate是封装了OKHttp和标准RESTful风格的网络框架,只要配置好对象的,就能轻松的进行网络请求。
Renovate 目前支持
- 支持 GET, HEAD, DELETE,PUT,PATCH,OPTIONS,POST等请求方式
- 比Retrofit更简单方便
- 文件上传
- 支持RxJava函数式相应编程(强烈推荐使用)
- 自适应Java平台和Android平台(Android平台回调在主线程中执行)
- 使用过Retrofit的接入到Renovate学习成本低
下载及使用
Renovate
下载 [最新版本][2] 或者通过Maven:
<dependency>
<groupId>renovate2</groupId>
<artifactId>renovate</artifactId>
<version>0.2</version>
<type>pom</type>
</dependency>123456
还可以通过 Gradle:
compile 'renovate2:renovate:0.2'1
Renovare 至少需要Java 7 和Android 2.3.
RX-Renovate(需要使用RxJava需要这个版本)
下载 [最新版本][3] 或者通过Maven:
<dependency>
<groupId>renovate2</groupId>
<artifactId>rx-renovate</artifactId>
<version>0.2</version>
<type>pom</type>
</dependency>123456
还可以通过 Gradle:
compile 'renovate2:rx-renovate:0.2'1
如果需要在Android平台上进行使用,需要添加rxandroid
目前支持的是rxjava 1.2.0,后续版本将增强至rxjava2
Maven:
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxandroid</artifactId>
<version>1.2.1</version>
<packaging>aar</packaging>
</dependency>123456
Gradle:
compile 'io.reactivex:rxandroid:1.2.1'1
Examples
e.g
比如你有一个登录的实体,长得下面的样子:
@HTTP(method = HTTP.Method.POST, path = "api/member/login")
@FormUrlEncoded
public class Login {
@Params(value = "mobile") //如果不写,参数名将是字段名
public String mobile;//帐号
@Params(value = "password")
public String password; //密码
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}12345678910111213141516171819202122232425
当中的@Http是必须要的,而Post请求中如果没有文件等要上传,只是表单则需要添加@FormUrlEncoded
好了,一个简单的http请求的对象化已经实现完成。接下来我们就要进行请求了
@Test
public void testConvert() throws InterruptedException {
final CountDownLatch countDownLatch = new CountDownLatch(1);//用于junit测试
Login p = new Login();
p.mobile = "133xxxxxxxx";//设置请求的电话号码
p.password = "password";//当然这是密码
System.out.println("current thread = " + Thread.currentThread().getName());
//显示的是当前的线程,Android上的话,就是主线程了
Renovate renovate = new Renovate.Builder().baseUrl("http://localhost:8080/").build();
renovate.request(p).request().enqueue(new Callback<ResponseBody>() { //异步请求
@Override
public void onResponse(Call call, Response response) {
print(response);//打印返回信息
//也是主线程
System.out.println("response thread = " + Thread.currentThread().getName());
countDownLatch.countDown();
}
@Override
public void onFailure(Call call, Throwable t) {
t.printStackTrace();
countDownLatch.countDown();
}
});
countDownLatch.await();
System.out.println("end");
}
12345678910111213141516171819202122232425262728
So easy,一个简单的登录就完成了。当然了,功能不仅仅是这样子,如果要做更多的事情呢。
比如:
- 结合Rxjava,实现函数式响应编程
- 请求当中有个对象序列化成对象请求
- 对返回的Json自动解析成想要的对象
- 取消请求
- 上传多个文件
- 实现其他的请求方式,例如GET, HEAD, DELETE,PUT,PATCH,OPTIONS
- 添加请求头部
希望大家能够提供宝贵意见和建议,更好的维护这个产品
Contact me
- 邮箱地址:babyte185@163.com
- QQ:243107006