OkHttp 和 Retrofit 两大框架的作用和联系
OkHttp
OkHttp 是一款为 Java 项目和 Android 应用设计的 HTTP 与 HTTP/2 的客户端。
HTTP 是现代应用网络比较流行的传输协议,是我们所交换数据的媒介。高效的 HTTP 使得你加载的数据更快以及节省带宽。
OkHttp 是一个默认高效的 HTTP 客户端:
- HTTP/2 支持允许同一主机的所有请求共享一个 socket。
- 连接池减少请求等待时间(如果 HTTP/2 未被占用)。
- 下载 GZIP 减少了下载大小。
- 响应缓存完整避免了重复请求网络。
当网络异常时,OkHttp 依然会工作:它会默默地从常见的连接问题中恢复过来。如果你的服务有多个 IP 地址,OkHttp 会尝试在第一次连接失败的时候更换 IP 地址。这对IPv4 + IPv6和冗余数据中心托管的服务是必需的。OkHttp发起与现代TLS功能(SNI,ALPN)的新连接,并且如果握手失败则回退到TLS 1.0。
使用 OkHttp 很简单。它的请求和响应 API 设计具有流式建造者模式和不变形的特点。它支持同步块调用和异步调用两种回调方式。
OkHttp 支持 Android 2.3 及其以上版本。对于 Java 版本,最低需要 jdk 1.7。
Retrofit
适用于Android 和 Java 的类型安全的HTTP客户端。
一个 RESTful 的 HTTP 网络请求框架:
- 基于 OkHttp 并且遵循 Restful API 设计风格
- 通过注解配置网络请求参数
- 支持同步和异步网络请求
- 支持多种数据的解析以及序列化格式(Gson、Json、XML、Protobuf)
- 提供对 RxJava 支持
联系
- 网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责网络请求接口的封装。
- App 应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作。
- 在服务端返回数据后,OkHttp 将原始的结果交给 Retrofit,Retrofit 根据用户的需求对结果进行解析