您的位置:首页 > 移动开发 > Android开发

retrofit2.0源码分析

2017-11-12 17:12 204 查看

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

下回分析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息