批量
和 鏈式
插件版網絡請求庫KJNetworkPlugin是一款基於面向協議的網絡抽象層的插件版網絡請求庫,基於AFNetworking的基礎上再次封裝使用。簡單講應該分爲這麼幾大板塊:git
其實還有上傳日誌插件和加密解密插件等等,因爲和項目耦合度比較高,暫時不考慮分享,後面我會提供思路,你們能夠根據思路去封裝屬於本身的專屬插件github
這裏也提供兩個入口,設置通用的根路徑和通用參數,相似:userID,token等swift
/// 根路徑地址
@property (nonatomic, strong, class) NSString *baseURL;
/// 基本參數,相似:userID,token等
@property (nonatomic, strong, class) NSDictionary *baseParameters;
複製代碼
封裝的有基本的網絡請求,上傳下載文件等方法數組
/// 設置請求數據格式,默認 KJSerializerHTTP
@property (nonatomic, assign) KJSerializer requestSerializer;
/// 設置響應數據格式,默認 KJSerializerHTTP
@property (nonatomic, assign) KJSerializer responseSerializer;
/// 設置超時時間,默認30秒
@property (nonatomic, assign) NSTimeInterval timeoutInterval;
/// 默認請求頭
@property (nonatomic, strong) NSDictionary *header;
/// 插件數組
@property (nonatomic, strong) NSArray<id<KJNetworkDelegate>>*plugins;
/// 請求類型,默認 KJNetworkRequestMethodPOST
@property (nonatomic, assign) KJNetworkRequestMethod method;
/// 根路徑地址,默認 [KJBaseNetworking baseURL] 設置的根路徑地址
@property (nonatomic, strong, nullable) NSString *ip;
/// 網絡請求路徑
@property (nonatomic, strong) NSString *path;
/// 請求參數
@property (nonatomic, strong, nullable) id params;
/// 加密參數,不涉及加密時刻該數據與上面一致
@property (nonatomic, strong, readonly) id secretParams;
/// 網址請求地址
@property (nonatomic, strong, readonly) NSString *URLString;
/// 網絡請求插件時機,配合 `KJNetworkThiefPlugin` 插件使用效果極佳
@property (nonatomic, assign, readonly) KJRequestOpportunity opportunity;
/// 請求體標識符號,惟一標識
@property (nonatomic, strong, readonly) NSString *requestIdentifier;
/// 上傳資源文件,須要使用時刻須要實例化該對象
@property (nonatomic, strong, nullable) KJConstructingBody *constructingBody;
/// 下載文件,須要使用時刻須要實例化該對象
@property (nonatomic, strong, nullable) KJDownloadBody *downloadBody;
複製代碼
後面的批量和鏈式網絡請求,也須要繼承該基類而後設計點高級用法,後面有空我再慢慢寫文章分享,期待您的關注緩存
KJNetworkingResponse:響應請求結果,這個類應該基本都是插件庫內部使用或者KJNetworkThiefPlugin
插件用到,獲取插件之間產生的數據等等markdown
KJNetworkingType:彙總全部枚舉和回調聲明網絡
KJNetworkingDelegate:插件協議,目前抽離出如下5條協議方法,其中大體分爲開始時刻、網絡請求時刻、網絡成功、網絡失敗、最終返回閉包
/// 開始準備網絡請求
/// @param request 請求相關數據
/// @param endRequest 是否結束下面的網絡請求
/// @return 返回準備插件處理後的數據
- (KJNetworkingResponse *)prepareWithRequest:(KJNetworkingRequest *)request endRequest:(BOOL *)endRequest;
/// 網絡請求開始時刻請求
/// @param request 請求相關數據
/// @param stopRequest 是否中止網絡請求
/// @return 返回網絡請求開始時刻插件處理後的數據
- (KJNetworkingResponse *)willSendWithRequest:(KJNetworkingRequest *)request stopRequest:(BOOL *)stopRequest;
/// 成功接收數據
/// @param request 接收成功數據
/// @param againRequest 是否須要再次請求該網絡
/// @return 返回成功插件處理後的數據
- (KJNetworkingResponse *)succeedWithRequest:(KJNetworkingRequest *)request againRequest:(BOOL *)againRequest;
/// 失敗處理
/// @param request 失敗的網絡活動
/// @param againRequest 是否須要再次請求該網絡
/// @return 返回失敗插件處理後的數據
- (KJNetworkingResponse *)failureWithRequest:(KJNetworkingRequest *)request againRequest:(BOOL *)againRequest;
/// 準備返回給業務邏輯時刻調用
/// @param request 請求相關數據
/// @param error 錯誤信息
/// @return 返回最終加工以後的數據
- (KJNetworkingResponse *)processSuccessResponseWithRequest:(KJNetworkingRequest *)request error:(NSError **)error;
複製代碼
KJNetworkBasePlugin:插件基類,插件父類併發
KJNetworkPluginManager:插件管理器,中樞神經,其實也就這麼一個方法供外界調用oop
/// 插件版網絡請求
/// @param request 請求體
/// @param success 成功回調
/// @param failure 失敗回調
+ (void)HTTPPluginRequest:(KJNetworkingRequest *)request success:(KJNetworkPluginSuccess)success failure:(KJNetworkPluginFailure)failure;
複製代碼
目前已有5款插件供使用:
KJNetworkLoadingPlugin:基於MBProgressHUD封裝的加載框和錯誤提示框插件
KJNetworkAnslysisPlugin:基於MJExtension封裝的解析數據插件
KJNetworkCachePlugin:基於YYCache封裝的網絡緩存插件
KJNetworkCertificatePlugin:配置自建證書插件
KJNetworkThiefPlugin:修改KJNetworkingRequest
和獲取 KJNetworkingResponse
插件
後面有空我再來一一介紹每種插件設計思路和使用方式
鏈式網絡請求,關於如何使用後面再寫文章,期待您的持續關注
這邊目前封裝兩套使用鏈式插件方案,
/// 鏈式網絡請求
/// @param request 請求體系
/// @param success 所有成功回調,存放請求全部結果數據
/// @param failure 失敗回調,只要一個失敗就會響應
/// @param chain 鏈式回調,返回下個網絡請求體,爲空時便可結束後續請求,responseObject上個網絡請求響應數據
+ (void)HTTPChainRequest:(__kindof KJNetworkingRequest *)request
success:(KJNetworkChainSuccess)success
failure:(KJNetworkChainFailure)failure
chain:(KJNetworkNextChainRequest)chain,...;
複製代碼
/// 鏈式網絡請求,需 `chain` 和 `lastchain` 配合使用
/// @param request 請求體系
/// @param failure 失敗回調,只要一個失敗就會響應
/// @return 返回自身對象
+ (instancetype)HTTPChainRequest:(__kindof KJNetworkingRequest *)request failure:(KJNetworkChainFailure)failure;
/// 請求體傳遞載體,回調返回上一個網絡請求結果
@property (nonatomic, copy, readonly) KJNetworkChainManager * (^chain)(KJNetworkNextChainRequest);
/// 最後鏈數據回調,回調最後一個網絡請求結果
@property (nonatomic, copy, readonly) void(^lastChain)(void(^)(id responseObject));
複製代碼
批量插件網絡請求,這裏提供設置最大併發數量,失敗調用次數,錯誤重連時機等配置信息
/// 批量網絡請求
/// @param configuration 批量請求配置信息
/// @param reconnect 網絡請求失敗時候回調,返回YES再次繼續批量處理
/// @param complete 最終結果回調,返回成功和失敗數據數組
+ (void)HTTPBatchRequestConfiguration:(KJBatchConfiguration *)configuration
reconnect:(KJNetworkBatchReconnect)reconnect
complete:(KJNetworkBatchComplete)complete;
複製代碼
pod 'KJNetworkPlugin' # 插件版網絡
pod 'KJNetworkPlugin/Batch' # 批量插件網絡請求
pod 'KJNetworkPlugin/Chain' # 鏈式插件網絡請求
pod 'KJNetworkPlugin/Loading'
pod 'KJNetworkPlugin/Cache'
pod 'KJNetworkPlugin/Thief'
pod 'KJNetworkPlugin/Anslysis'
pod 'KJNetworkPlugin/Certificate'
複製代碼
寫東西着實累,老鐵們以爲有用還望點個星支持一下,傳送門KJNetworkPlugin
後面有相關插件我也會慢慢補充...