基于HTTP的網絡層框架:iOS Interactive
Interactive是一個iOS上基礎的網絡層框架
框架本身提供了5個核心協議,以及基礎的一套實現方案
框架提供一個巨大的擴展與增強空間,使用者可以在系統的實現方案上進行擴展,自己實現核心協議。
特性:
Simple:使用Interactive來進行Http請求處理將會變得非常簡單
Mock:Interactive內置支持數據的mock,可直接mock業務數據對象,而非僅僅是http返回的String
Reusable and Transferable :Interactive將請求和返回包裝成一個Api,方便進行重用與移植
Plugin:內置插件機制,可對請求進行前置后置處理,對調用者透明
Expansibility:極強擴展性,實現核心協議即可構建出屬于自己的小框架
Interactive有4個核心協議,其相互關系如下圖所示:
XHFApi (下面簡稱:Api)
@protocol XHFApi <NSObject> @required //provide a request base on ASIHTTPRequest -(ASIHTTPRequest*) getHttpRequest; //provide a parser which need to implement XHFResponseParser -(id<XHFResponseParser>) getResponseParser; @optional //mock Api response,not just string ,but business object -(id)mock; @end
Api 主要有2個方法,分別是:構建Http請求,構建Http響應的解析器
還有一個mock方法,實現此方法即可對這個請求進行mock行為。
注意mock返回的類型是id,不是String,這里返回的id類型應當是解析rsponse后的業務對象
XHFExecutor (下面簡稱:Executor)
@protocol XHFExecutor <NSObject> @required //execute a Api with Sync Mode -(id)execute:(id<XHFApi>)api exception:(NSException *__autoreleasing*)exception; //execute a Api with Async Mode and callback in MainThread -(id<XHFHandler>)execute:(id<XHFApi>)api completeOnMainThread:(CompleteCallback)callback; @end
Executor就是一個執行器,負責將一個Api發送出去,并且將Http返回的數據進行解析,最終返回解析完成的業務對象
有了上面2個協議的介紹,我們可以給出一段偽代碼,方便理解用法
SomeApi *api=[[SomeApi alloc]initWithUrl:@"http://www.google.com"]; SimpleExecutor *executor=[[SimpleExecutor alloc]init]; __autoreleasing NSException *exception=nil; id result=[executor execute:api exception:&exception]; if(exception!=nil){ //Business Code }
我們的使用方法,基本分為2步。1:構造一個Api 2.執行這個Api
XHFHandler (下面簡稱:Handler)
@protocol XHFHandler <NSObject> -(BOOL)isCanceled; -(BOOL)isDone; -(void)cancel; @end
Handler是Executor在執行異步請求時返回的一個句柄, 持有了這個Handler,就可以對這個請求進行取消操作。 同時也可以追蹤這個請求的一些狀態信息。
XHFExecutorPlugin (下面簡稱:Plugin)
@protocol XHFExecutorPlugin <NSObject> @optional //this will be invoke before the request send -(id)preProcess:(ASIHTTPRequest *)request context:(XHFExecutorContext *)context api:(id<XHFApi>)api; //this will be invoke after the response has received -(id)postProcess:(ASIHTTPRequest *)request context:(XHFExecutorContext *)context api:(id<XHFApi>)api; @end
Plugin是對Executor的擴展增強,我們可以在execute前后對Api或者請求進行處理。 典型的用法就是:前置處理可以用來做緩存,后置處理可以用來做重登陸處理
以上是4個核心協議的介紹
Interactive對上述的協議做了一個簡單通用的實現
XHFExecutor -> XHFSimpleExecutor
XHFHandler -> XHFSimpleHandler
基于以上Interactive框架,你可以做很多擴展
比如可以自己實現一個ImageExecutor,專門用來加載圖片,內部包含圖片緩存等功能
也可以自己去實現一些Plugin插件,可以對所有的Http請求進行過濾行為處理
也可以去實現和繼承Api協議,將公共的請求設置成幾個基礎Api類,然后以子類的方式構建各種業務Api
如果你有能力,也可以完全不用我們提供的XHFSimpleExecutor,和XHFSimpleHandler,完全自己實現一套