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.源码设计模式分析
下回分析。