本文出自门心叼龙的博客,属于原创类容,未经允许,不得转载。
本专栏的同步视频教程已经发布到CSDN学院:https://edu.csdn.net/course/detail/30408
Retrofit和OkHttp一样都是Jake Wharton大神的杰作,他们都是网络通讯框架,只不过Retrofit是对OkHttp的进一步封装,使其调用更加简单方便,读书要读经典,学框架也要学经典,之所以能成为经典,因为它经受住了历史的考验,得到了人们的广泛认可,我们不但要学会用,还要学习它的工作原理,学习框架所体现出来的优秀的设计思想,设计原则,以及脱离框架类似功能的实现方法,本课程共分为六个章节,由易到难,循序渐进,所有的知识点都是自己在多年的Android实战开发中总结出来的精华,涉及到了Retrofit开发中的方方面面,从服务端搭建到客户端验证一整套流程演示给大家,避免了很多教程只讲客户端的使用不讲服务端搭建,要么使用公共的服务端api资源给大家演示,而导致对服务端的实现逻辑一无所知的尴尬,因为服务端和客户端这是一个完整的整体,他们是缺一不可的,这也是本教程的最大特色,希望大家能够喜欢。retrofit是基于okhttp构建的,因此retrofit所有的工作都是围绕RequestBody和ResponseBody展开的,Retrofit可以把一个接口里面定义的方法通过注解的方式把它适配成HTTP的请求命令。
专栏介绍
上一期的专栏我们主要给大家介绍了okhttp相关的一些知识点,那么这期的专栏我们将要介绍okhttp的好搭档retrofit,retrofit也是一个网路通信框架,只不过okhttp是基于http的底层框架,而retrofit是对okhttp更进一步的封装,使其调用更加的方便。
本专栏的具体大纲如下:
retrofit应用详解与源码解析–概述
retrofit应用详解与源码解析–小试牛刀
retrofit应用详解与源码解析–注解详解
retrofit应用详解与源码解析–实战
retrofit应用详解与源码解析–源码解析
具体细节如下:
### 开宗明义
大纲简介
### 初露锋芒
服务端定义
客户端实现
### 大显身手
注解的分类
注解的使用
### 奇技淫巧
请求超时设置
日志拦截器的设置
网络的缓存设置
自定义数据转换器
单文件上传
多文件上传
文件的下载
带进度条的文件下载
动态的切换多个url
添加一个HTTPS的请求
动态的添加token访问认证
RxJava的结合使用
RxJava网络错误通用处理
与RxLifecycle的结合使用
与Deferred的结合使用
与Kotlin协程的结合使用
### 源码破解
Retrofit的创建
服务的创建
请求命令的创建
请求的执行
### 九九归一
设计模式
Jake Wharton的杰作
okhttp和retrofit都是同一家公司square的产品,都是Jake Wharton大神的杰作。Jake Wharton是Android界的一位神人,起初就职于Square公司,在这家公司期间开发了很多知名的开源框架,如我们经常使用的 Retrofit、OkHttp、LeakCanary ,ButterKnife、以及 RxJava、RxAndroid 等很多开源库都是它主导开发或参与开发的,可以说对Android整个开发生态的发展做出了重大贡献,正是由于Jake Wharton在Android江湖界的名气越来越大,也引起了google对它的关注,经常被google邀请参加一些技术分享,这也为后来他加入google埋下了伏笔,2017年8月7日宣布入职google,加入Android Framework开发组,负责Kotlin相关的开工作,虽然他离开了Square,但是之前他主导开发的那些开源项目还是继续由他负责维护的,下图是大神入职google的推特截图:
下面是Jake Wharton在github上的个人主页截图:https://github.com/JakeWharton
Retrofit是什么
在大神github主页排在第一位的就是这期专栏我们要讲的主角Retrofit,我们打开Retrofit的超链接,就来到了Retrofit的主页:https://github.com/square/retrofit
我们直接看最下面的Readme的介绍:
这个关于Retrofit的很简单的介绍,它是一个适用于Android和Java的类型安全的Http客户端,下面我们对这句话进行解读,前半句很好理解说明Retrofit不但能用在Android开发而且还能用在Java开发中,后半句就有意思了,类型安全的Http客户端,类型安全的怎么讲?因为retrofit是基于okhttp构建的,因此retrofit所有的工作都是围绕RequestBody和ResponseBody展开的, Retrofit以使用Converters转换器安全地将这些类型与其他类型进行序列化的转换,Retrofit内置了几个转换器,他们封装了流行的序列化库,如GSon和Jackson,以保证数据类型转换的安全,所以Retrofit就是一个类型安全的Http客户端
我们接着往下看,现在最新的版本为2.9.0,最后一句很重要,Retrofit最低支持Java1.8,Android最低支持5.0,通过github官网我们似乎并不能得到关乎retrofit介绍的更多信息,下面我们直接打开Retrofit类的源码注释,查看关它的介绍:
Retrofit是个final类,也就是说他是不能被继承的,Retrofit可以把一个接口里面定义的方法通过注解的方式把它适配成HTTP的请求命令,使用建造者模式构建一个Retrofit,然后把创建的接口传递给Retrofit的create的方法来生成一个接口的实现,接下来是retrofit一个使用简单的样例,这段话就是关于Retrofit最权威的定义,它玩的就是一个注解,把请求的信息封装到注解里,然后再去解析注解,最终生成OkHttp所需要的Request,最后对响应的数据通过转换器进行解析,最后返回给我们的app应用层,如果需要了解更多信息请访问网站 https://square.github.io/retrofit/
工作流程
以上就是Retrofit一个理论介绍,具体的使用我们后面在介绍,接下来我们来看Retrofit宏观上的一个架构图,让我们进一步加深对它的理解:
首先由app应用层发起了一个网络请求,Retrofit负责把请求的数据通过注解进行封装,然后在把请求数据解析为OkHttp所需要的Request再交给OkHttp,随后OkHttp在根据Http协议将请求头、请求体的数据转换为服务端所需要的请求头和请求体,最后在建立Tcp链接向服务端发起请求,而服务器将响应结果一步步返回给最上层的应用层, 这就是Retrofit一个大致的工作流程。
与其他框架的对比
最后我们在介绍一下Retrofit与其他几个网络请求框架的区别,具体详解的介绍请参考我的另外一篇文章《OkHttp应用详解与源码解析–Android网络通讯框架发展史》
框架 | 特点 | 优点 | 缺点 | |
---|---|---|---|---|
一代 | HttpClient | Apache软件基金会提供的,Android6.0以后被剔除了 | 重量级,功能强大 | API众多,不易扩展 |
HTTPURLConnection | Java.net包提供的原生库 | 轻量级,易扩展 | Android2.3之前有bug | |
二代 | AsyncHttpClient | Loopj开发的 | 调用简单方便,异步的 | 个人维护,有安全问题 |
Volley | google出品 | 小而快 | 不适合大数据的下载 | |
三代 | OkHttp | square出品(Jake Wharton主程) | 新一代主流通讯框架,得到了google官方认可 | 暂无 |
Retrofit | square出品(Jake Wharton主程)对OkHttp的进一步封装 | 是一个类型安全的网络通讯框架 | 暂无 |
小结
通过本篇文章,我们知道了Retrofit是什么,它的宏观上的一个工作流程,以及他与其他网络通讯框架的区别,下一篇文章我们将介绍他的具体使用。