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.源碼設計模式分析
下回分析。