iOS网络请求框架封装

本文介绍了如何搭建一套分层的网络请求框架,包括网络请求的三层结构:第三层(ASI/AFN等)、第二层(基类与类别)和第一层(应用层)。重点讲述了如何通过封装初始化方法和参数配置,实现网络请求的统一管理,以便于后期更换网络请求库,减少工程量。同时,提出了在第二层类别中处理特定参数和请求地址的配置,以保持代码的清晰和维护性。最后,展示了在视图层如何发起网络请求及回调处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用网络请求的过程中,可以使用系统的框架、ASI、AFN、MK等,但是如果需要更换项目的网络请求框架(比如,项目之前用的ASI框架,现在需要更换为AFN),那么这将是一个好大的工程,项目初期,怎么搭建网络请求框架,才可以让修改网络请求的工程量减到最小呢,这是我们今天要说的问题。

网络请求框架一共三层:

第三层:ASI、AFN或者其它网络请求方式,

第二层:第二层分有基类与类别(Category)构成,基类用于共有参数与发起请求,分类则是为了团队开发与结构清晰

第一层:即应用层,比如一个登录、注册操作,需要从界面上获得参数,并配合回调。

1)首先需要遭到这几种网络请求中,最大的不同是什么?

ASI、AF在使用时,最大的不同就是他们的初始化方法,所以我们首先将这一层封装出来,作为框架的第二层的基类。基类中进行共有参数的配置以及发起请求,也可以有多种发起请求的方法。比如说项目中需要用到GET、POST同步异步请求,都可以在基类中配置并公开。

如:初始化AFN(第三层),配置参数并发起post异步请求的基类方法;

+(void)sendPostRequestWithMethod:(NSString *)method parameters:(NSDictionary *)parameters callback:(Callback)callback{

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@“text/html”];

manager POST:Base_Url(method) parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {

if(callback) {

callback(1,nil);

return;

}

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

if(callback) {

callback(0,error);

return;

}

}

}

2)每一个网络请求的参数与请求地址配置

在项目中,我们可能会发起上白哥网络请求的地址都不同,参数也不同,接口对参数的格式的要求也就不同,比如登录操作,可能需要对密码进行加密,一串数字可能需要用“_”进行拼接等,呢么这个参数在View层中配置好不好呢,当然也可以,但是不够清晰,东一个西一个,后台修改了参数格式以后,要到界面代码中找很久,那么我给出的解决办法是:将参数与地址配置在第二层的类目中,View层只需要引入泪目的头文件,传入未经过处理的参数,然后由泪目中的方法来进行配置即可,代码如下:

@implementation RequestBase (LoginRequest)

/**

@param username 用户名

@param password 为进行加密处理的密码

@param callback 完成网络请求的回调

*/

+ (void)senLoginRequestWithUsename:(NSString *)username password:(NSString *)password callback:(Callback )callback {

NSMutableDictionary *parameters = [NSMutableDictionary dictionary];

[parameters setObject:username forKey:@“username”];

[parameters setObject:password forKey:@“password”];

[RequestBase senGetRequestWithMethod:@“login”parameters:parameters callback:callback];

}

@end

3)View层发起网络请求与回调处理(登录为例)

当登录按钮点击时进行网络请求

/**

登录按钮点击响应事件

@param sender 登录按钮

*/

  • (void)loginButtonPressed:(UIButton *)sender {

//发起登录请求,将参数传递至第二层,进行详细配置(如password的加密等操作)

[RequestBase sendLoginRequesrWithUsername:@“Jane Doe”password:@“password” callback:^(NSError *error, NSMutableDictionary *result){

//判断回调是否失败活着返回值是否为字典,(也可将判断步骤放在第二层基类中)

if(!error && [result idkindOfClass:[NSDictionary class]]) {

NSLog(@“登录成功”);

}

}];

}

那么到此,三层网络请求的框架已经搭建完成,结构清晰,用法简单,如果遇到需要更换网络请求的情况,仅需要将第三层换掉,第二层基类中,更换初始化网咯请求方式即可,其余代码完全不用替换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值