YiNetwork HTTP 请求封装库

程序名称:YiNetwork

授权协议: MIT

操作系统: iOS

开发语言: Objective-C

YiNetwork 介绍

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

YiNetwork 官网

https://github.com/coderyi/YiNetwork

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Acapela TTS 是一个为 iPhone 和 iPad 开发的 TTS 引擎。
二维码(QR Code)扫描静态库,扫描效率较高。
RegexKitLite 是一个轻量级的 Objective-C 的正则表达式库,支持 Mac OS X 和 iOS,使用ICU 库开发。
一款基于ASIHttpReques开源的仿迅雷多线程断点续传功能的客户端,内置了百度音乐盒、土豆视频下载,新手可以学习ASIHttpRequest网络请求下载、JSON解析等操作。
实现动态检测网络(wifi)状况,不需要用户手动刷新,便可通知用户网络状态的变化。支持ARC。
使用iphoneSDK官方NSXMLParserDelegate做的简单xml解析,附带详细注释以及使用到的方法的详细解释,非常适合新手参考。
GH-Unit 是一个基于Object C的测试框架,支持Mac OSX 10.5和iOS 3.0以上版本。它具有以下特点:
JSONKit 是用 Objective-C 实现的一个高性能的 JSON 解析和生成库,支持 iOS。 下面是性能比较:
TouchXML 是使用 Objective-C 编写的 XML 解析器,适合在 iOS 和 Mac 平台下使用。
每个操作系统都有对应的规则和标准,比如ios就是,在ios上,是无法使用动态链接库的,而只能使用静态链接库。
ObjectiveResource 是将 Rails 的 ActiveResource 框架移植到 Objective-C 的项目。其主要目的是让
TBXML是一个用于iOS上的解析速度非常快的轻量级XML解析库。提供了非常简洁的接口,使用起来很简单。
这是一套Google开发的DOM方式XML解析类库,支持读取和修改XML文档,支持XPath方式查询。
WhirlyGlobe 是一个在 iPad 和 iPhone 显示三维的地球的开发包。
ShareKit 是iPhone中一键分享文字,图片,链接,文件到Facebook, twitter, delicious, tumblr, google
实现 splash画面(launch image)到程序界面(root view controller)之间的翻页过渡动画效果。
iOS6推出的一个新特性是Passbook(关于Passbook,请看:http://www.apple.com/ios/ios6/#passbook
这是 iPhone 上实现 TTS 功能的开发包,基于 CMU’s Festival Lite ——FLite 引擎开发。
一个十分简单易用、界面十分简洁的日历代码效果,月份切换还有很不错的动画效果。
实现动态版本检查功能。用户打开app之后,进行app的版本更新检查。如果检查到有新的版本,则弹出对话框提醒用户下载新版本。支持ARC或者non-ARC。