HTTP 请求封装库 YiNetwork

码农软件 · 软件分类 · 网络(Networking) · 2019-07-10 11:44:48

软件介绍

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请求方案。

Podfile

platform :ios, '7.0'pod "YiNetwork", "~> 0.9.2"

YiBaseModel

YiBaseModel继承自第三方库JSONModel,当然你也可以不用使用它,自己解析JSON数据或者其它格式的数据

YiBaseRequest

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对象,也就是取消这次请求

发送一个GET请求

只要分别子类化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请求

//通过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

本文地址:https://codercto.com/soft/d/9819.html

黑客与画家

黑客与画家

[美] Paul Graham / 阮一峰 / 人民邮电出版社 / 2011-4 / 49.00元

本书是硅谷创业之父Paul Graham 的文集,主要介绍黑客即优秀程序员的爱好和动机,讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题。书中的内容不但有助于了解计算机编程的本质、互联网行业的规则,还会帮助读者了解我们这个时代,迫使读者独立思考。 本书适合所有程序员和互联网创业者,也适合一切对计算机行业感兴趣的读者。一起来看看 《黑客与画家》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具