iOS网络请求库

作者: senpaiLi | 来源:发表于2019-03-13 14:29 被阅读41次

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

    作为一个入门级、大众级的封装,仿佛在网上随随便便就能找到一套适用于自己的方案。在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;
     
    详细见注释。
    

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

    相关文章

      网友评论

        本文标题:iOS网络请求库

        本文链接:https://www.haomeiwen.com/subject/odowhqtx.html