基于HTTP的網絡層框架:iOS Interactive

jopen 10年前發布 | 16K 次閱讀 iOS開發 移動開發 iOS Interactive

Interactive是一個iOS上基礎的網絡層框架

框架本身提供了5個核心協議,以及基礎的一套實現方案

框架提供一個巨大的擴展與增強空間,使用者可以在系統的實現方案上進行擴展,自己實現核心協議。

特性:

Simple:使用Interactive來進行Http請求處理將會變得非常簡單

Mock:Interactive內置支持數據的mock,可直接mock業務數據對象,而非僅僅是http返回的String

Reusable and Transferable :Interactive將請求和返回包裝成一個Api,方便進行重用與移植

Plugin:內置插件機制,可對請求進行前置后置處理,對調用者透明

Expansibility:極強擴展性,實現核心協議即可構建出屬于自己的小框架

Interactive有4個核心協議,其相互關系如下圖所示:

基于HTTP的網絡層框架:iOS Interactive

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,完全自己實現一套

github地址:https://github.com/xuhengfei/iOS-Interactive

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!