1.ApiDelegate
2.AbsApi
3.BaseApi
4.BaseServiceManager
5.RequestManager
该协议规范了所有遵守该协议的Api对象都应该拥有getReqUrl
、getReqHeader
、getReqBody
、getRequestMethod
、getTimeOut
方法。这种设计方式借鉴了Java、C#语法的Interface接口的设计思路。
getReqUrl
用于配置请求的Url地址,实现者需返回一个NSString
对象。getReqHeader
用于配置请求Header,实现者需返回一个NSDictionary
对象。getReqBody
用于配置请求Body,实现者需返回一个NSDictionary
对象。getRequestMethod
用于配置请求方式,目前提供了两种模式,通过enum枚举RequestMethod来区分,可以返回RequestMethodPOST
(POST请求)或者RequestMethodGET
(GET请求),其他请求方式将在后期补充。getTimeOut
用于配置请求超时时间。请求抽象类,规范了继承自AbsApi需要实现的方法。这种设计方式借鉴了Java、C#语法的abstract抽象类的设计思路。
getRootUrl
获取请求域名url。默认为nil,实现者必须实现。getPath
获取请求url的后半部分。默认为nil,实现者必须实现。getBaseHeader
基本header。默认为nil,若有每个请求必填的header字段,请实现此方法。getHeader
基本header以外的请求header。默认为nil,实现者必须实现。getBaseBody
基本body。默认为nil,若有每个请求必填的body字段,请实现此方法。getBody
基本body以外的请求body。默认为nil,实现者必须实现getRespClass
用于指定该请求返回的数据实体Class,实现者需返回一个Class类型[实体类],将返回的数据转换成指定数据实体对象。在同一页面中连续发起n个不同的api请求后,我们可以通过class来区分返回的数据。请求基类,继承自AbsApi
,同时遵守了ApiDelegate
协议。内部实现了ApiDelegate
协议的方法,大家使用时直接继承BaseApi
。如果BaseApi不符合您的口味,您可以自定义一个继承自AbsApi同时又遵守BaseApiDelegate协议的对象。
用于通过AFNetWorking发送请求,仅作为一个管理者,本身并不具备发送请求的能力;目前依赖于AFNetWorking来发送网络请求;在内部封装了一些默认创建AFHTTPSessionManager
的方法。
/// 使用block方式发送数据请求;api:发送参数,sucBlock:成功回调,failBlock:失败回调
- (void)sendRequest:(AbsApi<ApiDelegate>*)api
sucBlock:(ResponseSuccessBlock)sucBlock
failBlock:(ResponseFailureBlock)failBlock;
该方法使用Block回调来发送请求,api参数为继承自AbsApi抽象类且遵守ApiDelegate
协议的对象,(PS:BaseApi符合该约束,所有继承BaseApi的对象都符合该参数约束
) BaseServiceManager
内部通过api对象配置来发送请求。sucBlock
,failBlock
为请求成功/失败回调。
继承自BaseServiceManager;设计此Manager的主要目的是,在未来不再采用AFNetWorking时,可以在本类的sendRequest...方法中切换到其他第三方请求框架,而无需在项目中到处修改将AFNetWorking请求改为其他请求方式,同时承担控制第三方请求的角色;因此,即使您不喜欢这个类,也请勿修改;另外,此类增加了通过Protocal回调数据的方式请求。
/// ResponseDelegate 数据响应回调协议
@property (nonatomic,assign) id<ResponseDelegate> delegate;
+ (id)initManagerWithDelegate:(id<ResponseDelegate>)delegate;
/// 发送数据请求,参数为继承AbsApi抽象类,且遵守BaseApiDelegate协议 的对象
- (void)sendRequest:(AbsApi<ApiDelegate>*)api;
我们可以直接通过initManagerWithDelegate:
方法来初始化RequestManager对象,将数据回调协议delegate传入。
通过使用sendRequest:
方法来发送请求,与父类相同,api参数为继承自AbsApi抽象类且遵守BaseApiDelegate
协议的对象。而上文提到的BaseApi
符合这一点,如果BaseApi不符合您的口味,您可以自定义一个继承自AbsApi同时又遵守BaseApiDelegate协议的对象。