YiNetwork是一个的HTTP请求封装库,基于AFNetworking的AFHTTPSessionManager。
YiNetwork主要是一个基类库,主要是两个类YiBaseRequest和YiBaseModel.
之所以创建两个基类,是为了让各个请求之间的耦合性降低,能够非常简单的实现一个请求,并且在上层很简单调用一个请求。每一个请求一个子类也非常能够方便团队协作,每个人都可以管理自己的请求模块。
另外,由于Apple在网络请求方面由NSURLConnection(iOS 2-9)转向NSURLSession(iOS7以上),随之AFNetworking 3.0也就废弃了NSURLConnection相关的 AFURLConnectionOperation,AFHTTPRequestOperation,AFHTTPRequestOperationManager 三个类,并且建议使用AFHTTPSessionManager,所以YiBaseRequest也是基于AFHTTPSessionManager的封 装。
YiNetwork目前依赖JSONModel version1.1.2和AFNetworking version2.6.1,是一套值得选择的App请求方案。
platform :ios, '7.0'pod "YiNetwork", "~> 0.9.2"
YiBaseModel继承自第三方库JSONModel,当然你也可以不用使用它,自己解析JSON数据或者其它格式的数据
YiBaseRequest必须子类化
属性
@property (nonatomic, strong) NSMutableDictionary *getParams; @property (nonatomic, strong) NSMutableDictionary *postParams;
可以在子类自定义的init方法里面,加入需要的GET参数或者POST参数
@property (nonatomic, assign) NSInteger retryCount; @property (nonatomic, assign) NSInteger retryIndex;
retryCount表示请求出错时重试的次数,默认为0;retryIndex表示正在重试第几次
- (void)requestWithSuccess:(void(^)(YiBaseModel *model,NSURLSessionTask *task))success failure:(void(^)(NSError *error,NSURLSessionTask *task))failure;
数据请求的方法,只要在上层调用该方法就可以获得请求成功或者失败的反馈,以得到YiBaseModel的数据。
- (YiHTTPRequestMethod)requestMethod;
需要实现的子类方法,表示请求方法,默认是YiHTTPRequestMethodGet为GET请求
- (YiBaseModel *)responseModelWithData:(id)data;
处理请求到得数据
- (NSString *)pathName; - (NSString *)rootUrl;
pathName表示请求的具体URL路径;rootUrl表示请求的URL
- (AFConstructingBlock)constructingBodyBlock;
当需要上传文件时可以使用
- (void)cancel;
取消当前的NSURLSessionTask对象,也就是取消这次请求
只要分别子类化YiBaseRequest和YiBaseModel,在上层使用就非常简单
//通过GET请求获取用户信息 YiGetUserInfoRequest *getUserInfoRequest=[[YiGetUserInfoRequest alloc] init]; [getUserInfoRequest requestWithSuccess:^(YiBaseModel *model,NSURLSessionTask *task){ NSLog(@"username is %@",((YiUserInfoModel *)model).name); } failure:^(NSError *error,NSURLSessionTask *task){ }];
子类化YiBaseModel为YiUserInfoModel
@interface YiUserInfoModel : YiBaseModel @property(nonatomic,strong) NSString *name; @end
子类化YiBaseRequest为YiGetUserInfoRequest
@implementation YiGetUserInfoRequest -(instancetype)init{ self = [super init]; if (self) { } return self; } -(instancetype)initWithNameId:(NSString *)nameId { self = [super init]; if (self) { [self.getParams setValue:nameId forKey:@"name_id"]; } return self; } - (NSString *)pathName { return @"users/coderyi"; } - (YiHTTPRequestMethod)requestMethod { return YiHTTPRequestMethodGet; } - (YiBaseModel *)responseModelWithData:(id)data { return [[YiUserInfoModel alloc] initWithDictionary:data error:nil]; } @end
//通过POST请求修改用户信息 YiModifyUserInfoRequest *modifyUserInfoRequest=[[YiModifyUserInfoRequest alloc] initWithNameId:@"coderyi"]; [modifyUserInfoRequest requestWithSuccess:^(YiBaseModel *model,NSURLSessionTask *task){ NSLog(@"username is %@",((YiUserInfoModel *)model).name); } failure:^(NSError *error,NSURLSessionTask *task){ }];
子类化YiBaseRequest为YiModifyUserInfoRequest
@implementation YiModifyUserInfoRequest -(instancetype)initWithNameId:(NSString *)nameId { self = [super init]; if (self) { [self.postParams setValue:nameId forKey:@"name_id"]; } return self; } - (NSString *)pathName { return @"users/coderyi"; } - (YiHTTPRequestMethod)requestMethod { return YiHTTPRequestMethodPost; } - (YiBaseModel *)responseModelWithData:(id)data { return [[YiUserInfoModel alloc] initWithDictionary:data error:nil]; } @end
//上传一张图片 UIImage *image; YiUploadImageRequest *uploadImageRequest=[[YiUploadImageRequest alloc] initWithImage:image]; [uploadImageRequest requestWithSuccess:^(YiBaseModel *model,NSURLSessionTask *task){ NSLog(@"model is %@",model); } failure:^(NSError *error,NSURLSessionTask *task){ }];
子类化YiBaseRequest为YiUploadImageRequest
@implementation YiUploadImageRequest{ UIImage *_image; } - (id)initWithImage:(UIImage *)image { self = [super init]; if (self) { _image = image; } return self; } - (AFConstructingBlock)constructingBodyBlock { return ^(id formData) { NSData *data = UIImageJPEGRepresentation(_image, 0.9); NSString *name = @"image"; NSString *formKey = @"image"; NSString *type = @"image/jpeg"; [formData appendPartWithFileData:data name:formKey fileName:name mimeType:type]; }; } @end
本文向大家介绍Angular网络请求的封装方法,包括了Angular网络请求的封装方法的使用技巧和注意事项,需要的朋友参考一下 很多时候,我很喜欢angular的编码风格,特别是angular支持typescript之后,完整的生命周期,完美的钩子函数,都是别的语言所无法替代的。 这里我来说说我自己的网络请求封装,某种意义上来说,angular自己的网络请求封装的很好的,我们没有必要再来画蛇添足,
本文向大家介绍Flutter 网络请求框架封装详解,包括了Flutter 网络请求框架封装详解的使用技巧和注意事项,需要的朋友参考一下 Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 HttpClient、第三方网络请求 http以及 Flutter 中的 Dio。我们可以比较一下这三种网络请求方式,然后封装为我们方便请求网络的工具类。
本文向大家介绍php实现的http请求封装示例,包括了php实现的http请求封装示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php的http请求封装。分享给大家供大家参考,具体如下: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php curl用法总结》、《php socket用法总结》、《PHP网络编程技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Arr
本文向大家介绍详解JavaScript原生封装ajax请求和Jquery中的ajax请求,包括了详解JavaScript原生封装ajax请求和Jquery中的ajax请求的使用技巧和注意事项,需要的朋友参考一下 前言:ajax的神奇之处在于JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。Ajax 在浏览器与 Web 服务器
本文向大家介绍封装了jQuery的Ajax请求全局配置,包括了封装了jQuery的Ajax请求全局配置的使用技巧和注意事项,需要的朋友参考一下 摘要: jQuery已经成为项目中最常见的js库,也是前端开发最喜欢使用的库。下面是在项目中封装了jQuery的Ajax,分享给大家。 代码: 小结: 在执行Ajax请求时只需要调用ajaxSettings函数即可,如下: 以上所述就是本文的全部内
本文向大家介绍vue中axios请求的封装实例代码,包括了vue中axios请求的封装实例代码的使用技巧和注意事项,需要的朋友参考一下 axios Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中, 也是vue官方推荐使用的http库;封装axios,一方面为了以后维护方便,另一方面也可以对请求进行自定义处理 安装 封装 我把axios请求封装在htt
本文向大家介绍关于ajax网络请求的封装实例,包括了关于ajax网络请求的封装实例的使用技巧和注意事项,需要的朋友参考一下 实例代码: 以上这篇关于ajax网络请求的封装实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
本文向大家介绍Vue封装Axios请求和拦截器的步骤,包括了Vue封装Axios请求和拦截器的步骤的使用技巧和注意事项,需要的朋友参考一下 PS:本文代码在vue-cli3构建的基础vue项目之上进行编写:vue create my-project axios 是一个基于 promise 的 http 库,可以用在浏览器和 node.js 中, 也是vue官方推荐使用的http库。 axi