1.功能
来自官方介绍:
A type-safe HTTP client for Android and Java
类型安全的HTTP客户端
2.总体设计
用户层
- 提供retrofit工作层需要的参数。
- 已经对返回来的Request交由Http层处理。
- 提供用户输入,以及返回对应的期待或失败处理。
retrofit工作层
- 拷贝用户参数,对参数进行处理。
- 处理完符合Http请求层的request返回给用户层处理。
http处理层
- 处理实际请求并与底层
socket层沟通。 - 返回给用户层。
第三方适配层
- 为
Convert做适配,比如对原始数据(二进制流,或字符串)进行处理,并产生符合用户预期的返回值(比如通过gson转换为对象)。 - 为
Call做适配,让第三方提供更强大的功能。
3.设计模型
3.1用户层
retrofit
概念:
retrofit通过注解声明的java服务接口来生成http请求.。
职责:
- 通过参数的方式获取
Converter和CallAdapter两个集合工厂。 - 通过动态代理的方式,获取用户定义的方法,并使用
serviceMethod的相关方法进行处理。 - 实例化
Okhttp和OkhttpCall。
Call
概念: Call<T>作为一种设计模式,能够直接返回预期的值或失败信息,让异步方法的调用看起来像同步方法一样。
定义的一组与Web服务器逻辑交互的接口,与retrofit 交互发送请求至服务器,以及获取响应。实现轮询和重试失败。具体实现类是OkhttpCall。
Callback
概念:
Call 的回调函数,由用户定义,响应请求的成功或失败。
Response
概念:
作为Callback 的参数提供封装过的http entity请求,以及具体的用户期待的返回类型。
ServiceImpl
概念:
用户定义的一组请求服务接口。
3.2retrofit工作层
ServiceMethod
概念:
将ServiceImpl 的注解信息和参数适配成Call实际需要的请求和响应。
职责:
- 实例化
ParameterHandler和ResquestBuilder。 - 提供
ParameterHandler从ServiceImpl获取到的相应参数信息。 - 从
ResquestBuilder获取符合Call需要的Request。 - 从
Retrofit获取Convert和CallAdapter两个列表,以及其他Http信息。 - 提供一个
toResponse方法 供OkhttpCall使用,通过对应的ConvertAdapter完成对原始服务器传回来的二进制流或字符串转换成对应的对象。 - 其他
OkhttpCall
概念:
对逻辑定义与服务器交互的Call 进行实现,使用Okhttp。
职责:
- 使用
ServiceMethod提供的符合Okhttp的request,通过Okhttp的方法enqueue与服务器进行交互。 - 使用
ServiceMethod的toResponse完成响应的转换。 - 在
Okhttp的方法enqueue中导入一个CallBack支持用户的响应。
ParameterHandler
概念:
对用户提交的参数信息进行处理,并放入RequestBuilder。
ResquestBuilder
概念:
生成Okhttp 需要的请求信息。
Converter
概念:
对用户提交的参数字符串进行处理,或请求体进行分辨处理(如分辨XML还是JSON)。这里与第三方的响应体共用一个接口。
3.3Http处理层
okhttp
概念:
将retrofit提交过来的请求与服务器交互。并作为OkhttpCall 的参数,由其对响应体做封装。
3.4第三方适配层
Converter
概念:通过第三方库GSON 或者其他的对响应内容进行处理,输出符合用户预期的对象。
CallAdapter
概念:对Call<R> 进行转换成T,能够享受到第三方库响应式编程等强大的功能。
4.源码设计模式分析
下回分析。