iOS中基于http協(xié)議上傳下載一般用大名鼎鼎的網(wǎng)絡(luò)庫AFNetworking,一般在項目中還會對此庫進行二次封裝,本片文章將介紹唐巧團隊開源的基于AFNetworking二次封裝的開源庫YTKNetworkGitHub - AFNetworking/AFNetworking: A delightful networking framework for iOS。
注:本文解析是基于YTKNetwork1.x版本,目前YTKNetwork已經(jīng)更新到了2.x版本,具體的區(qū)別見YTKNetwork 2.0 遷移指南
一、YTKNetwork提供的功能
YTKNetwork除了具備AFNetworking所有功能外,還提供如下高級功能:
1、支持按時間緩存網(wǎng)絡(luò)請求內(nèi)容
2、支持按版本號緩存網(wǎng)絡(luò)請求內(nèi)容
3、支持統(tǒng)一設(shè)置服務(wù)器和 CDN 的地址
4、支持檢查返回 JSON 內(nèi)容的合法性
5、支持文件的斷點續(xù)傳
6、支持 block 和 delegate 兩種模式的回調(diào)方式
7、支持批量的網(wǎng)絡(luò)請求發(fā)送,并統(tǒng)一設(shè)置它們的回調(diào)(實現(xiàn)在YTKBatchRequest類中)
8、支持方便地設(shè)置有相互依賴的網(wǎng)絡(luò)請求的發(fā)送,例如:發(fā)送請求A,根據(jù)請求A的結(jié)果,選擇性的發(fā)送請求B和C,再根據(jù)B和C的結(jié)果,選擇性的發(fā)送請求D。(實現(xiàn)在YTKChainRequest類中)
9、支持網(wǎng)絡(luò)請求 URL 的 filter,可以統(tǒng)一為網(wǎng)絡(luò)請求加上一些參數(shù),或者修改一些路徑。
10、定義了一套插件機制,可以很方便地為 YTKNetwork 增加功能。猿題庫官方現(xiàn)在提供了一個插件,可以在某些網(wǎng)絡(luò)請求發(fā)起時,在界面上顯示"正在加載"的 HUD。
具體的使用可以見YTKNetwork github官網(wǎng),下面著重講解一下YTKNetwork的架構(gòu)
二、YTKNetwork原理
1、架構(gòu)圖如下:
2、相關(guān)類介紹
1)YTKBaseRequest:網(wǎng)絡(luò)請求基類,通過成員變量requestOperation發(fā)起http請求
2)YTKRequest:單個網(wǎng)絡(luò)請求類,項目中的網(wǎng)絡(luò)請求直接繼承該類。該類繼承于YTKBaseRequest,通過調(diào)用YTKNetworkAgent全局單例對象方法- (void)addRequest:(YTKBaseRequest *)request發(fā)起網(wǎng)絡(luò)請求
3)YTKBatchRequest:批量網(wǎng)絡(luò)請求類,通過此類來實現(xiàn)批量發(fā)送請求
4)YTKBatchRequestAgent:管理YTKBatchRequest對象類,該類在實現(xiàn)上是一個全局單例對象
5)YTKChainRequest:串行網(wǎng)絡(luò)請求類,通過該類來實現(xiàn)有依賴關(guān)系的網(wǎng)絡(luò)請求
6)YTKChainRequestAgent:管理YTKChainRequest對象類,該類在實現(xiàn)上是一個全局單例對象
7)YTKNetworkAgent:網(wǎng)絡(luò)代理類,該類實際上是一個膠水層,YTKRequest通過方法addRequest管理YTKRequest對象,并且通過AFHTTPRequestOperationManager把YTKRequest代表的url請求路由到AFNetworking里面
由于YTKNetwork基于AFNetworking來實現(xiàn)的,順便介紹一下AFNetworking相關(guān)的類,按功能來說明:
網(wǎng)絡(luò)請求類:
1)AFURLConnectionOperation:實際發(fā)起網(wǎng)絡(luò)請求與處理網(wǎng)絡(luò)相應(yīng)數(shù)據(jù)的類。該類繼承于NSOperation,并且實現(xiàn)了協(xié)議NSURLConnectionDelegate、NSURLConnectionDataDelegate、NSSecureCoding、NSCopying
2)AFHTTPRequestOperation:繼承于AFURLConnectionOperation,AFHTTPRequestOperationManager調(diào)用
序列化與反序列化類
1)AFHTTPRequestSerializer:http請求參數(shù)序列化為標準http參數(shù)類。該類通過實現(xiàn)協(xié)議AFURLRequestSerialization來實現(xiàn)序列化
2)AFJSONRequestSerializer:http請求參數(shù)序列化為JSON格式類。繼承于AFHTTPRequestSerializer
3)AFPropertyListRequestSerializer:請求參數(shù)序列化成application/x-plist格式類。繼承于AFHTTPRequestSerializer:http
4)AFHTTPResponseSerializer:響應(yīng)數(shù)據(jù)反序列化類,該類通過實現(xiàn)AFURLResponseSerialization協(xié)議來實現(xiàn)反序列化
5)AFJSONRequestSerializer:響應(yīng)數(shù)據(jù)反序列化為JSON格式類。
6)AFXMLParserResponseSerializer:響應(yīng)數(shù)據(jù)反序列化為XML格式類
7)AFPropertyListResponseSerializer:響應(yīng)數(shù)據(jù)反序列化為property list格式類
8)AFImageResponseSerializer:響應(yīng)數(shù)據(jù)反序列化為UIImage格式類
9)AFCompoundResponseSerializer:暫時不清楚用法
AFHTTPRequestOperationManager:直接給業(yè)務(wù)層使用的類。業(yè)務(wù)直接通過該類的Head、Post、Get方法創(chuàng)建請求。該類的
AFHTTPSessionManager:直接給業(yè)務(wù)層使用的類.通過NSURLSession來實現(xiàn)網(wǎng)絡(luò)請求
其他類:UIKit目錄下的擴展類,可以拿來從網(wǎng)絡(luò)上加載圖片,比如UIImageView+AFNetworking擴展