retrofit2.0源码分析

来源:互联网 发布:圆梦会计软件联系方式 编辑:程序博客网 时间:2024/05/29 16:53

1.功能


来自官方介绍:

A type-safe HTTP client for Android and Java
类型安全的HTTP客户端

2.总体设计


这里写图片描述

用户层

  1. 提供retrofit工作层需要的参数。
  2. 已经对返回来的Request交由Http层处理。
  3. 提供用户输入,以及返回对应的期待或失败处理。

retrofit工作层

  1. 拷贝用户参数,对参数进行处理。
  2. 处理完符合Http请求层的request返回给用户层处理。

http处理层

  1. 处理实际请求并与底层socket层沟通。
  2. 返回给用户层。

第三方适配层

  1. Convert做适配,比如对原始数据(二进制流,或字符串)进行处理,并产生符合用户预期的返回值(比如通过gson转换为对象)。
  2. Call做适配,让第三方提供更强大的功能。

3.设计模型


这里写图片描述

3.1用户层

retrofit

概念:

retrofit通过注解声明的java服务接口来生成http请求.。

职责:

  • 通过参数的方式获取ConverterCallAdapter 两个集合工厂。
  • 通过动态代理的方式,获取用户定义的方法,并使用serviceMethod 的相关方法进行处理。
  • 实例化OkhttpOkhttpCall

Call

概念:
Call<T>作为一种设计模式,能够直接返回预期的值或失败信息,让异步方法的调用看起来像同步方法一样。
定义的一组与Web服务器逻辑交互的接口,与retrofit 交互发送请求至服务器,以及获取响应。实现轮询和重试失败。具体实现类是OkhttpCall

Callback

概念:

Call 的回调函数,由用户定义,响应请求的成功或失败。

Response

概念:

作为Callback 的参数提供封装过的http entity请求,以及具体的用户期待的返回类型。

ServiceImpl

概念:

用户定义的一组请求服务接口。

3.2retrofit工作层

ServiceMethod

概念:

ServiceImpl 的注解信息和参数适配成Call实际需要的请求和响应。

职责:

  • 实例化ParameterHandlerResquestBuilder
  • 提供ParameterHandlerServiceImpl 获取到的相应参数信息。
  • ResquestBuilder 获取符合Call 需要的Request。
  • Retrofit 获取ConvertCallAdapter 两个列表,以及其他Http信息。
  • 提供一个toResponse 方法 供OkhttpCall使用,通过对应的ConvertAdapter 完成对原始服务器传回来的二进制流或字符串转换成对应的对象。
  • 其他

OkhttpCall

概念:

对逻辑定义与服务器交互的Call 进行实现,使用Okhttp。

职责:

  • 使用ServiceMethod 提供的符合Okhttp的request,通过Okhttp 的方法enqueue与服务器进行交互。
  • 使用ServiceMethodtoResponse 完成响应的转换。
  • Okhttp 的方法enqueue中导入一个CallBack 支持用户的响应。

ParameterHandler

概念:

对用户提交的参数信息进行处理,并放入RequestBuilder

ResquestBuilder

概念:

生成Okhttp 需要的请求信息。

Converter

概念:

对用户提交的参数字符串进行处理,或请求体进行分辨处理(如分辨XML还是JSON)。这里与第三方的响应体共用一个接口。

3.3Http处理层

okhttp

概念:

将retrofit提交过来的请求与服务器交互。并作为OkhttpCall 的参数,由其对响应体做封装。

3.4第三方适配层

Converter

概念:通过第三方库GSON 或者其他的对响应内容进行处理,输出符合用户预期的对象。

CallAdapter

概念:对Call<R> 进行转换成T,能够享受到第三方库响应式编程等强大的功能。

4.源码设计模式分析


下回分析。

原创粉丝点击