这已经是老生常谈的问题了。
作为一个入门级、大众级的封装,仿佛在网上随随便便就能找到一套适用于自己的方案。在afnetworking一统天下之后(得到了苹果官方认可),基于其afnetworking的封装也越来越全面、强大。
但是,每一个开发者都想拥有属于自己的网络请求库☺,而且很多别人的封装用起来隔靴搔痒,所以我们在整理了项目内所有网络请求的痛点之后,搞了一套最适合我们自己的方案。
我们现在就用最流行的“影响地图”来解构这套框架。
由于类名有所修改,所以这个框架图可以参考来看
这套方案能为我们带来什么
相比于afnetworking,ZZCHTTPSession提供了以下功能:
- 支持硬盘缓存网络请求内容
- 支持内存缓存网络请求内容(参考sdwebimage,分为内存缓存和硬盘缓存)
- 支持缓存同一URL,某个参数value不同的情况
- 支持缓存的统一清除管理
- 保证返回 JSON 内容的合法性
- 支持统一设置URL地址,测试域名、自定义域名管理
- 请求和回调的分离,比如登陆之后,只需要管理需要重新请求的signal就好了,不用回到具体的页面处理。
- 支持批量的网络请求发送,并统一设置它们的回调(直接把signal作为数组进行请求)
- 可以统一为网络请求加上一些参数,或者修改一些路径。
适用项目
除了URL的管理稍显复杂之外,其他都尽量向轻量级,适用性靠拢。
适合中小型项目的开发使用,个人开发尤其推荐(使用链式的方式传参,完全是不想声明那么多的API啊,尽管有一部分开发试听抗拒这种方式的😂)。
支持大部分APP对URL管理、内存硬盘缓存、多个请求管理、model管理的要求。对依赖路由的APP能发挥最大优势。(完全解耦)
基本思想
ZZCURLManagement配置URL,ZZCHTTPSessionSignal配置请求,建议加一个协议层,用来管理所有的signal。
协议层使用ZZCHTTPServer的分类。
简单demo:
一、创建signal:
LZHTTPSessionSignal *signal = [LZHTTPSession creatSignalWithUrl:@"https://m.zuzuche.com/w/book/api/app/faq/index.php" maker:^(LZHTTPRequestMaker * _Nonnull make) {
make.get();
make.cachePolicy(LZHTTPRequestCachePolicyOlCache);
}];
二、实现回调:
signal.complete = ^(NSInteger code, NSString * _Nonnull msg) {
NSLog(@"%@",msg);
};
signal.success = ^(id _Nonnull data, BOOL isCache) {
NSLog(@"%@",data);
};
三、发起请求:
[signal request];
相关使用:
更新请求配置:
- (void)updateWithMaker:(void(^)(LZHTTPRequestMaker *make))makeBlock;
设置自定义域名:
[LZHTTPSession setCustomHost:@"m_app.zuzuche.net"];
更改当前环境:
[LZHTTPSession setEnviStateIfDev:true];
配置urlId,推荐使用urlId来创建signal
LZSetUpUrlId(NSString *module_id,NSString *url_id,NSString *formal_url,NSString *dev_url);
读取缓存:
- (void)readCache;
模拟请求读取本地数据:
- (void)fakeRequestWithFilePath:(NSString *)filePath delay:(float)delay;
详细见注释。
网友评论