网络层方法封装4
- 说明
拦截器顾名思义就是在请求发送之前拦截请求,拦截到的请求可以进行修改之后进行发送,或者阻止请求的发送。可以用于添加分页参数之类的需求。
验证器指的是验证参数(验证结果的方法后面再补充),验证参数主要用于判断输入参数的合法性,如果验证不通过则可以返回一个错误信息,由请求方法抛出错误,如果验证通过那就返回一个 nil就可以了。
- 代码
先说说请求对象模型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @interface DKRequest : NSObject
@property (nonatomic,copy) NSString * urlStr;
@property (nonatomic,copy) NSString * method;
@property (nonatomic,strong) NSDictionary *params;
@property (nonatomic,strong) NSDictionary *header;
@property (nonatomic,assign) DKCacheStrategy cacheStrategy;
@property (nonatomic,copy) DKHTTPResponseBlock responseBlock;
+ (instancetype)requestWithUrlStr:(NSString *)urlStr method:(NSString *)method header:(NSDictionary *)header params:(NSDictionary *)params strategy:(DKCacheStrategy)strategy; @end
|
完整的接口示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| /** 发送HTTP请求
@param method 请求方法,你可以写@"get"或者@"post"(不区分大小写)或者已经定义好的 kGET 或 kPOST @param strategy 缓存策略 @param URLString 请求地址 @param header 请求头,可为空 @param params 请求参数,可为空 @param filterBlock 拦截器 @param verifyBlock 验证参数 @param block 回调 @return 请求 Id */ - (NSInteger)requestForMethod:(NSString *)method cacheStragety:(DKCacheStrategy)strategy url:(NSString *)URLString header:(NSDictionary *)header params:(NSDictionary *)params filter:(DKHTTPRequestFilterBlock)filterBlock verifyParams:(DKHTTPParamsVarifyBlock)verifyBlock responseBlock:(DKHTTPResponseBlock)block;
|
拦截器的 block
给你一个对象,你可以修改这个对象然后返回回去
1
| typedef DKRequest *(^DKHTTPRequestFilterBlock)(DKRequest *request);
|
验证器的 block
给你参数,验证参数后你可以返回一个验证不通过的错误信息,也可以返回空表示验证通过
1
| typedef NSString *(^DKHTTPParamsVarifyBlock)(NSDictionary *params);
|
关于验证参数
如果只是想单纯地验证参数是否是全部不为空(这里指空字符串,并不是nil,因为nil根本插不进字典),那这里也提供了一个宏可以快速实现。
1 2
| @property (nonatomic,copy) DKHTTPParamsVarifyBlock verifyIsAllNonNullBlock;
|
关于过滤(验证)响应体
过滤响应体主要是为了防止错误的数据传回到 Service层,比如一些JSON 串解析后会传回 NSNull之类的恶心东西,如果误当做字符串操作的话会导致程序崩溃。不过因为 MJExtension 框架里面已经做了之类的处理,所以如果使用了MJExtension 框架的话,一般来说是不会出现问题,所以这个过滤方法作为单例的成员属性加入,设计为全局作用!
传给你一个 DKResponse, 你可以经过处理之后返回一个想要的 DKResponse
1 2
| @property (nonatomic,copy) DKHTTPResultFilterBlock resultFilterBlock;
|
今天逼哥放我假,所以我就写了这个.就这样子,demo我还是放在这里