retrofit应用详解与源码解析--概述

本文详细介绍了Retrofit,Jake Wharton的杰作,一个用于Android和Java的类型安全HTTP客户端。Retrofit基于OkHttp,通过Converters确保数据类型的转换安全。文章概述了Retrofit的工作流程,其通过注解将接口方法转换为HTTP请求,并通过建造者模式构建。此外,还对比了Retrofit与其他网络请求框架的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文出自门心叼龙的博客,属于原创类容,未经允许,不得转载。

本专栏的同步视频教程已经发布到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网络通讯框架发展史

框架特点优点缺点
一代HttpClientApache软件基金会提供的,Android6.0以后被剔除了重量级,功能强大API众多,不易扩展
HTTPURLConnectionJava.net包提供的原生库轻量级,易扩展Android2.3之前有bug
二代AsyncHttpClientLoopj开发的调用简单方便,异步的个人维护,有安全问题
Volleygoogle出品小而快不适合大数据的下载
三代OkHttpsquare出品(Jake Wharton主程)新一代主流通讯框架,得到了google官方认可暂无
Retrofitsquare出品(Jake Wharton主程)对OkHttp的进一步封装是一个类型安全的网络通讯框架暂无

小结

通过本篇文章,我们知道了Retrofit是什么,它的宏观上的一个工作流程,以及他与其他网络通讯框架的区别,下一篇文章我们将介绍他的具体使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

门心叼龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值