欢迎光临
我们一直在努力

ServerAPI

建站超值云服务器,限时71元/月

ServerAPI

项目介绍:

ServerAPI

快速集成的网络架构

这个项目体现的是一个框架思想,只是提供了框架,缓存和网络请求根据项目需求随意更换

通过Category完成对个人项目的定制
ServerAPI创建Category需要实现ServerAPIResponseProtocol的协议,这个协议主要实现对请求返回的数据格式化详见demo

@protocol ServerAPIResponseProtocol <NSObject>  

@required  

/**  
请求结束时间   最好设置时放到responseFormatWithData方法内  

@return 请求结束时间  
*/  
-(NSDate *)endDate;  

/**  
数据格式化处理  

@param data 数据源  
@param error 错误源  
@param completion 请求回调  
@param cacheData 缓存数据  
*/  
-(void)responseFormatWithData:(id)data error:(NSError*)error completion:(sap_requestCompletion)completion cacheData:(id)cacheData;  
@optional  

/**  
数据格式化后的处理 用于对ServerAPI实现Category加入部分业务逻辑  

@param result 格式化数据  
*/  
-(void)responseCustomDoInCategoryWithResult:(ServerResult*)result;  

@end  

顺便说一下responseCustomDoInCategoryWithResult的使用可以在继承ServerAPI的DemoAPI上做Category这样侵入性才最小,针对不同的API做不同的业务逻辑

ServerAPIManager创建Category需要实现ServerAPIManagerRequestProtocol的协议

@protocol ServerAPIManagerRequestProtocol <NSObject>  

@required  

/**  
发起请求逻辑实现 方便用AFN,ASI或自己写  

@param api 请求描述的ServerAPI  
@param completion 请求回调  
@param progressHandle 请求进度  
*/  
-(void)requestDataWithAPI:(ServerAPI*)api completion:(sap_requestCompletion)completion progressHandle:(sap_progressHandle)progressHandle;  

/**  
取消一个请求  

@param api 请求描述的ServerAPI  
*/  
-(void)cancelRequestWithAPI:(ServerAPI*)api;  

@optional  

/**  
发起请求逻辑实现 方便用AFN,ASI或自己写  

@param api 请求描述的ServerAPI  
@param successHandle 请求成功回调  
@param failHandle 请求失败回调  
@param progressHandle 请求进度  
*/  
-(void)requestDataWithAPI:(ServerAPI*)api successHandle:(sap_requestSuccessHandle)successHandle failHandle:(sap_requestFailHandle)failHandle progressHandle:(sap_progressHandle)progressHandle;  

/**  
根据requestID取消一个请求  

@param requestID 请求唯一ID  
*/  
-(void)cancelRequestWithRequestID:(NSString*)requestID;  

/**  
根据requestsTag取消某一类表示的请求  

@param requestsTag 请求分类标识  
*/  
-(void)cancelRequestWithRequestsTag:(NSString*)requestsTag;  

/**  
根据requestID数组取消相关请求  

@param requestList requestID的数组  
*/  
-(void)cancelRequestWithRequestIDList:(NSArray*)requestList;  

/**  
根据ServerAPI数组取消相关请求  

@param requestList ServerAPI的数组  
*/  
-(void)cancelRequestWithAPIList:(NSArray*)requestList;  

/**  
取消最后一个请求  
*/  
-(void)cancelLastRequest;  

/**  
取消第一个请求  
*/  
-(void)cancelFirstRequest;  

@end  

requestDataWithAPI里面去写对应的请求发起包括用不用一个NSURLSession各种请求定制在这完成
还有ServerAPIManagerCacheProtocol这个协议则是管理缓存逻辑可以不去实现也可以实现

@protocol ServerAPIManagerCacheProtocol <NSObject>  

@optional  

/**  
拉取缓存数据  

@param api 请求描述的ServerAPI  
@param completion 请求回调  
@param error 错误信息  
@return 缓存有无  
*/  
-(BOOL)fetchDataCacheWithAPI:(ServerAPI*)api completion:(sap_requestCompletion)completion error:(NSError*)error;  

/**  
拉取缓存数据  

@param api 请求描述的ServerAPI  
@param successHandle 请求成功回调  
@param failHandle 请求失败回调  
@param error 错误信息  
@return 缓存有无  
*/  
-(BOOL)fetchDataCacheWithAPI:(ServerAPI*)api successHandle:(sap_requestCompletion)successHandle failHandle:(sap_requestFailHandle)failHandle error:(NSError*)error;  

/**  
保存缓存  

@param api 请求描述的ServerAPI  
*/  
-(void)saveDataCacheWithResult:(ServerAPI*)api;  
@end  

其中fetchDataCacheWithAPI调用在requestDataWithAPI里写而saveDataCacheWithResult调用在responseFormatWithData里写
上边的这些就是对请求的整体定制化,至于属性添加,就直接runtime吧

体现了集约型和离散型网络架构的结合

   //离散型API使用  一个请求是一个API类,用NSClassFromString主要为了省头文件引用懒得加头文件。。。             
   [NSClassFromString(@"DemoAPI") newRequestDataWithCompletion:^(ServerResult *result, NSError *errInfo) {  

   } requestParameters:nil requestTag:NSStringFromClass([self class])];  

    ServerAPI *discreteApi=[[NSClassFromString(@"DemoAPI") alloc] init];  
    discreteApi.requestParameters=nil;  
    discreteApi.requestTag=NSStringFromClass([self class]);  
    [discreteApi requestDataWithCompletion:^(ServerResult *result, NSError *errInfo) {  

    }];  

   //集约型API使用  可以直接类扩展加静态方法设置,可以自行类扩展个更简洁通用的方法这里只距离  
   ServerAPI *intensiveAPI=[[ServerAPI alloc] init];  
    intensiveAPI.requestHost=@"http://xxx.xxx.xxx";  
   intensiveAPI.requestPath=@"xxx";  
   intensiveAPI.requestParameters=nil;  
    intensiveAPI.requestTag=NSStringFromClass([self class]);  
   intensiveAPI.accessType=APIAccessType_Get;  
    intensiveAPI.resultFormat=APIResultFormat_JSON;  
   intensiveAPI.timeOut=30;  
   intensiveAPI.retryTimes=2;  
   [intensiveAPI requestDataWithCompletion:^(ServerResult *result, NSError *errInfo) {  

    }];  

    //直接请求Url  
    ServerAPI *urlAPI=[[ServerAPI alloc] init];  
    urlAPI.requestURL=@"http://xxx.xxx.xxx";  
    urlAPI.requestTag=NSStringFromClass([self class]);  
    [urlAPI requestDataWithCompletion:^(ServerResult *result, NSError *errInfo) {  

    }];  

Installation

via CocoaPods

Install CocoaPods if you do not have it:-

$ [sudo] gem install cocoapods  
$ pod setup  

Create Podfile:-

$ edit Podfile  
platform :ios, '7.0'  
pod 'ServerAPI',  '~> 1.0.0'  
$ pod install  

Use the Xcode workspace instead of the project from now on.

https://github.com/heroims/ServerAPI

code4app

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ServerAPI
分享到: 更多 (0)