一款基于 AFN3.0 封装链式风格的网络请求库

一款基于 AFN3.0 封装链式风格的网络请求库

install

pod 'WBNetwork'

特性

  1. 网络请求用的 AFNetworking
  2. block 回调方式
  3. 集约式的请求方法,链式调用
  4. 快速请求同一个 API 时,可以通过设置 minRequestInterval 防止这种情况发生。如果两次请求时间间隔小于 minRequestInterval ,直接从缓存文件拿取数据。(如果对数据即时性要求较高,设置 minRequestInterval 为 0 关闭此功能)
  5. 可以同时发起多个请求,全部请求完成后有一个 block 回调,传回来一个 Dictionary。字典 key 是请求的链接,value 是成功返回的数据 data 或者错误 error。
  6. 可以设置请求的默认参数。
  7. 两个 baseURL,一个测试环境,一个正式环境。
  8. 简单数据处理:可以选择交付给业务层三种数据类型: NSDictionary(默认)、NSString、NSData
  9. 定义了一个插件机制。eg:加入 HUD 插件

使用示例

    /**
     * 1. 在合适的地方设置默认参数, 例如AppDelegate中didFinishLaunch方法
     */
     //设置好baseUrl,发起请求的时候就可以写部分URL。例如:url(@"/user/login")
    WBREQUEST.baseUrlDebug = @"http://www.debug.com";//测试环境baseURL
    WBREQUEST.baseUrlRelease = @"http://www.release.com";//正式环境baseURL
    //默认请求参数,发起请求的时候可以不调用parameters方法,或者传入除了默认参数之外的其他参数。
    WBREQUEST.defaultParameters = @{@"appid":@"",@"appPass":@""};//访问服务器的账号和密码。
    //是否使用缓存,默认YES
    WBREQUEST.cacheData = NO;
    //发起同一请求最小时间间隔,默认1s
    WBREQUEST.minRequestInterval = 2;

    //添加HUD插件
    [WBREQUEST wb_addPlugIn:[WBReqeustHUDPlugIn new]];

    
    /**
     * 2. 发起一个请求. 最简单可以调用url success startRequest三个方法就可以发起一个请求.
     */
    WBReqeustHUDPlugIn *plugIn = (WBReqeustHUDPlugIn *)[WBREQUEST plugInWithIdentifier:@"hud"];//hud插件
    plugIn.HudInView = self.view;//可以选择将hud加在self.view上而非window上
    plugIn.HudText = @"正在登录...";

    //网络请求
    WBREQUEST.url(@"/user/login").parameters(@{@"phone":@"136********",@"passwd":@""}).success(^(NSURLSessionDataTask *task, id responsedObj){
        WBLog(@"登录成功");
    }).failure(^(NSURLSessionDataTask *task, NSError *error){
        WBLog(@"登录失败");
    }).startRequest();

    /**
     * 3. 同时发起多个请求
     */
    WBReqeustHUDPlugIn *plugIn = (WBReqeustHUDPlugIn *)[WBREQUEST plugInWithIdentifier:@"hud"];
    plugIn.isPlugInFree = YES; // 让插件失效

    WBREQUEST.batchRequestTypes(@[WBPOST,WBPOST,WBPOST]).batchUrls(@[url0,url1,url2]).batchParameters(@[@{},@{},@{}]).batchRequestDone(^(NSDictionary *dic) {
    
        //记得请求完成奖插件恢复能用
        plugIn.isPlugInFree = NO;

        WBLog(@"======================\ndic is %@\n================================",dic);
        
        for (id obj in dic.allValues) {
            if ([obj isKindOfClass:[NSError class]]) {
                WBLog(@"obj 出现了\n有错!");
            } else {
                WBLog(@"obj 出现了\n数据:%@",obj);
            }
        }
        
    }).startBatchRequest();

编码过程中的思考

  1. 网络请求可以用 NSURLSession 或者 AFNetworking。方便起见,用了 AFNetworking
  2. 回调方式可以用 delegate 或者 block。为了使用方便就用了block。
    //回调时,把一个block作为参数,所以这里没法自动生成格式,得手写。使用过程中可以拖到代码块以提高效率,就像 dispatch_once 也是写成了代码块
    success(^(NSURLSessionDataTask *task, id responsedObj){
    WBLog(@"登录成功");
    })
  3. 请求方式可以用集约式或者离散式。同样是方便起见,选择了集约式的请求方式。YTKNetwork 是离散式请求方式,适用于大型项目。
  4. 方便起见,使用链式调用。可以设置baseUrl、默认参数等。最少可以用三个方法发起一个请求: url、success、startRequest。
  5. 为了防止快速连续的请求同一个接口。可以设置 minRequestInterval, 默认值是1s。就是说一秒内向一个接口发起两次请求,第二次并不会真正发起请求,而是从缓存拿取数据。判断时间间隔实用的是缓存文件的'最后修改时间'。
  6. 同时发起好几个请求时候,因为WBRequest是个单例,所以可能出现回调错乱的情况发生,为了解决这个问题,加了个recorder数组。每一个请求对应一个recorder,recorder持有success回调、failure回调,这样回调就不会找错了。
  7. 在A页面发起一个请求,成功回调里面使用了 self,请求没有完成时候用户就点了返回键。这时候A并不会 delloc,而是等待接口请求成功/失败后,走完回调方法才 delloc。这个功能实现是每次发起一个请求时候,就会创建一个 recorder 去持有 url、parameters、success 回调、failure 回调等。请求完成后会把这个 recorder 置 nil。
  8. 每发起一个请求前,检查网络状况,没网就直接提示用户。
  9. 简单的格式处理,可以直接返回给业务层三种数据类型:NSData、NSDictionary、NSString
  10. 缓存使用归档,每个请求的数据写成一个文件。

Github地址

WBNetwork

简书地址

悟空没空

送上一个代码块 ^^

 WBREQUEST.url(<#NSString * url#>).parameters(<#NSDictionary * parameters#>).success(^(NSURLSessionDataTask * task,id responseObject){
 <#code#>
}).startRequest();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容