iOS網(wǎng)絡(luò)庫-JJNetwork

JNetwork

封裝網(wǎng)絡(luò)通信的必要性,對于一般應(yīng)用封裝下第三方的網(wǎng)絡(luò)庫,提供常用的POST和GET方法,然后Callback給調(diào)用者,可以滿足一般的情況,但是隨著業(yè)務(wù)發(fā)展,用戶量的增長,給網(wǎng)絡(luò)通信提出更多的要求,比如:改進網(wǎng)絡(luò)通信的性能,網(wǎng)絡(luò)通信的安全,以及網(wǎng)絡(luò)封裝的靈活性...基于這些要求所有我們有必要封裝一個網(wǎng)絡(luò)通信的模塊,它的目的要解決我們常見問題,也要滿足某些請求特殊性,所以我列出以下問題需要解決:

架構(gòu)

JJAPIRequest

每個請求的基本單位,每個網(wǎng)絡(luò)請求必須是繼承這個對象,并實現(xiàn)JJRequestProtocol,才能正常工作,代碼示例

網(wǎng)絡(luò)請求的必要信息

這里是指網(wǎng)絡(luò)請求的一些必要信息,最少是需要URL的,默認的HTTP Method是GET,其他都是可選的

緩存的策略選擇

每個Request可以選擇自己對應(yīng)的緩存策略,由于是Protocol的設(shè)計,開發(fā)者可以根據(jù)自己的邏輯來選擇,現(xiàn)在暫時只提供三種策略:

/**

Request support the cache feature,default will request network immediately

do not need cache.

- ReloadFromNetwork: Default mode,request from network

- ReloadFromCacheElseLoadNetwork: If have cache,will return the cache,do not request network,if not exist cache,will load origin source

- ReloadFromCacheTimeLimit: First time load request origin source,save the cache for the limit time,if expire,will load origin source and replace the old cache

*/

typedef NS_ENUM(NSUInteger,HTTPCachePolicy){

ReloadFromNetwork,

ReloadFromCacheElseLoadNetwork,

ReloadFromCacheTimeLimit,

};

最后強調(diào)一點就是JJNetwork的Cache支持POST和Get的,iOS自帶的CachePolicy只支持GET,因為JJNetwork設(shè)計之初就是為接口請求設(shè)計的,所以文件上傳和下載不在我們功能之內(nèi)

以及后期的擴展

目前為止,只給Request基礎(chǔ)的功能,后續(xù)在Request添加各項屬性和方法來滿足多變業(yè)務(wù)的需求

JJAPIService

JJAPIService是整個JJNetwork的核心和入口,網(wǎng)絡(luò)的請求都是由這個地方發(fā)送出去的,從層次的角度來說,這里就是App的網(wǎng)絡(luò)數(shù)據(jù)提供層,代碼示例

使用方式的選擇:Category or Extend

使用Extend的好處是:編譯期間,可以使用自定義變量,對于開發(fā)者來說比較靈活 壞處是:侵入性太強

使用Category的好處是:運行時,按需加載,不破壞原來的結(jié)構(gòu)擴展 壞處是:寫自定義變量不方便(技術(shù)上做的到),方法名重復(fù)問題

在這個選擇上,我選擇了繼承(extend)這種方式,主要是考慮開發(fā)者使用的靈活,以及不受方法名約束的問題

方法名表達具體意思

在這個地方是我要堅持的地方,當我們繼承于JJAPIService,我們需要一個自定義的方法來表達我的請求是要干什么,需要傳遞什么參數(shù),具體達到什么功能用方法名來體現(xiàn),所以這個方式給維護者來說很明確,使用者看到這個類和方法,很快的清晰知道了Service的作用

攔截器的使用

這是JJNetwork的高級功能,有兩種方式使用這個功能,使用JJAPISer

作者:jezz

鏈接:http://www.itdecent.cn/p/9a5b4dd8378e

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容