Retrofit2---网络交互的艺术

Retrofit2是一个基于OkHttp的网络交互库,通过注解简化了网络请求的编写。本文回顾了网络访问框架的发展,解释了Retrofit与OkHttp的关系,并展示了使用Retrofit前后的代码对比,揭示了Retrofit如何让代码更简洁、更具艺术性。
摘要由CSDN通过智能技术生成

Retrofit是啥

A type-safe HTTP client for Android and Java
翻译:Android和Java使用类型安全的Http客户端

Retrofit的前世今生

Http客户端用来做网络访问,网络访问,对绝大多数应用来说是一个基础功能
我们来简单回顾下网络访问框架的发展史:
1. HttpUrlConnection和HttpClient。Android2.1时代,还没有什么框架流行,请求网络都用这个。HttpUrlConnection刚出来的时候Bug巨多,比如说—对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。后面一直有人在维护,在Android 2.3版本的时候,谷歌加入了更加透明化的响应压缩。 在Android 4.0版本中,又添加了一些响应的缓存机制。HttpClient是Apache的,出来的时候比较稳定,但是Android官方对它一直都没怎么维护,甚至从Android5.1版本开始已经把它从SDK移除了,如果还在使用的同学需要自己去手动导入Apache的包。
2. android-async-http。随后又出现了async-http,它在一些反面做了升级,实现了简单的封装,框架雏形。比如:

 1. 异步请求能力,匿名回调处理Response
 2. 内部使用线程池来处理并发请求,线程重用提高效率
 3. Http请求,发生再异步线程

3. Afindl,Xutils。包含网络访问框架,图片加载,数据库,控件绑定框架合成的一系列框架的集合框架。当年他们可是风靡一时,这个很好、很中国。就像小时候玩”学习机”,小霸王其乐无穷时代,4合一、8合一、99合一的赶脚。回过头看,这种框架特别符合中国人的思维方式—极致的使用主义,包含所有,中庸之道。但是兼顾太多,维护框架的人精力又是有限的,很容易就顾此失彼,慢慢的。绑定控件被ButterKnife,Dragger替代;图片加载慢慢的被ImageLoader替代,后来又被Picasso、Glide、Fresco替代;ORM数据库被GreenDao、ORMLite替代;网络–Volley替代;
4. Volley,不可否认Volley是一个出色的网络框架Volley源码解析,拓展性强,设计优雅。
5. OkHttp,Volley虽好但是奈何不住没人维护啊,直接再应用层使用看着臃肿,要自己再封装一次。Volley 默认根据 Android 系统版本使用不同的 Http 传输协议实现.在 Android 3.0 以上 Volley 使用 ApacheHttpStack 作为传输协议, 在2.3 及以下使用 HttpURLConnection 作为传输层协议。注意:3.0以上使用ApacheHttpStack作为传输协议这句话,谷歌从Android5.1开始已经把Apache的东西从SDK中移除了,后面就产生了问题。有很多文章说使用OkHttp+Volley联合开发,最开始看到的时候感觉很迷糊,有了OKHttp干嘛还要加上Volley做网络访问。后面想想应该是这么回事:老项目使用了Volley框架,但是传输协议ApacheHttpStack别人干掉了,所以添加OkHttp框架来做传输就行了,以前的代码不用再修改。
当然OkHttp 是 Square 公司开源的一个 HTTP 网络框架,广受好评。

好了,闲话扯得够多了,步入我们的正题—Retrofit

Retrofit和OkHttp的关系

从字面上理解Retrofit翻译为—改进、改装、对…作样式翻新
这里写图片描述
同样是Square公司出品,同样是用作Http Client,Retrofit后于OkHttp,这个翻新的对象明显就是OkHttp了。
当然并不是说就直接覆盖替换了OkHttp,相反OkHttp的功能实现和架构还是很漂亮的。从Retrofit2.0开始内置OkHttp,如果把OkHttp比作一间房子,Retrofit更像是在给房子做装修,让房间变得更好看,没宜居,至于底层的连接、通信、重试这些Retrofit都不关心,交给OkHttp去完成就好。

这里写图片描述
总之:

  1. OkHttp专注和服务层Api打交道,提供更稳定可靠的连接
  2. Retrofit专注和App打交道,提供更友好,易懂易维护的访问方式

为啥说Retrofit写得代码像艺术

多说无益,show me the code
例如我们要实现如下展示的功能:
这里写图片描述

不用Retrofit我们怎么写的代码

步骤:
1. 需要一个服务端Api
接口已准备好:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值