Arclin

Advocate Technology. Enjoy Technology.

0%

网络层方法封装4

网络层方法封装4

  • 新增特性:
    • 拦截器和验证器
    • 封装请求对象
  1. 说明

拦截器顾名思义就是在请求发送之前拦截请求,拦截到的请求可以进行修改之后进行发送,或者阻止请求的发送。可以用于添加分页参数之类的需求。

验证器指的是验证参数(验证结果的方法后面再补充),验证参数主要用于判断输入参数的合法性,如果验证不通过则可以返回一个错误信息,由请求方法抛出错误,如果验证通过那就返回一个 nil就可以了。

  1. 代码

先说说请求对象模型

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);
  1. 关于验证参数

    如果只是想单纯地验证参数是否是全部不为空(这里指空字符串,并不是nil,因为nil根本插不进字典),那这里也提供了一个宏可以快速实现。

    1
    2
    /** 验证参数是否全部不为空 有空值的话会返回错误 */
    @property (nonatomic,copy) DKHTTPParamsVarifyBlock verifyIsAllNonNullBlock;
  2. 关于过滤(验证)响应体
    过滤响应体主要是为了防止错误的数据传回到 Service层,比如一些JSON 串解析后会传回 NSNull之类的恶心东西,如果误当做字符串操作的话会导致程序崩溃。不过因为 MJExtension 框架里面已经做了之类的处理,所以如果使用了MJExtension 框架的话,一般来说是不会出现问题,所以这个过滤方法作为单例的成员属性加入,设计为全局作用!
    传给你一个 DKResponse, 你可以经过处理之后返回一个想要的 DKResponse

1
2
/** 过滤响应体 */
@property (nonatomic,copy) DKHTTPResultFilterBlock resultFilterBlock;

今天逼哥放我假,所以我就写了这个.就这样子,demo我还是放在这里