iOS大咖说程序员iOS开发

iOS网络请求库

2019-03-13  本文已影响41人  senpaiLi

这已经是老生常谈的问题了。

作为一个入门级、大众级的封装,仿佛在网上随随便便就能找到一套适用于自己的方案。在afnetworking一统天下之后(得到了苹果官方认可),基于其afnetworking的封装也越来越全面、强大。

但是,每一个开发者都想拥有属于自己的网络请求库☺,而且很多别人的封装用起来隔靴搔痒,所以我们在整理了项目内所有网络请求的痛点之后,搞了一套最适合我们自己的方案。

我们现在就用最流行的“影响地图”来解构这套框架。
由于类名有所修改,所以这个框架图可以参考来看

解构图

这套方案能为我们带来什么
相比于afnetworking,ZZCHTTPSession提供了以下功能:

适用项目
除了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;
 
详细见注释。

git地址:
https://github.com/lzy1010/ZZCHTTPManager

上一篇 下一篇

猜你喜欢

热点阅读