retrofit2.0源碼分析

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


下回分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章