前面讲述了怎么简单地封装并使用一个AFNetworking的完整过程
但是如果我们有多个不同的业务的请求,不可能每一次都繁琐滴这样,我们需要用一个外部的类来构建一个网络请求的工具类。
同样,用我们熟悉的单例来实现,我们的思想就是将直接的post请求封装在一个单例类,并提供外部接口方法(根据需求例如,登录接口,注册接口等),
提供额外的参数拼接,成功的回调,失败的回调操作
我们首先需要一个单例的类方法,还有一个组参数的方法(因为很多请求的参数都是有共同部分,用一个可变字典来装)
+ (LBNetworkRequestManager *)sharedManager;
- (NSMutableDictionary *)commonParamsDictionay;
加上我们的封装请求的方法:
@interface LBNetworkRequestManager : NSObject
+ (LBNetworkRequestManager *)sharedManager;
- (NSMutableDictionary *)commonParamsDictionay;
- (void)requestBaseURLWithSuccess:(void(^)(NSString *responseParamOne, NSString *responseParamTwo))successAction failure:(void(^)(NSInteger code, NSString *message))failureAction;
@end
最重要的是讲解这个封装方法的实现:
我们可以看到,成功的回调操作里面有两个responseParamOne,responseParamTwo,这里只外放了两个参数,你可以根据你的需求外放多几个不同的参数,并且我们看到如果请求失败会有一个状态码的返回。
+ (LBNetworkRequestManager *)sharedManager{
static LBNetworkRequestManager *sharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedManager = [[[self class] alloc] init];
});
return sharedManager;
}
- (NSMutableDictionary *)commonParamsDictionay{
// compose some comman params ...
return params;
}
- (void)requestBaseURLWithSuccess:(void (^)(NSString *, NSString *))successAction failure:(void (^)(NSInteger, NSString *))failureAction{
NSMutableDictionary *params = [self commonParamsDictionay];
// you can add other params ...
[[LBHTTPHelper shareHTTPHelper] postPath:REQUEST_URL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject){
LBResponseParser *parser = [LBResponseParser shareResponseManager];
[parser parseResponseObject:responseObject];
if (parser.statusCode == 0) {
NSLog(@"post 服务器失败.");
}
NSLog(@"respose data :%@", parser.dataDic);
NSString *dev = [parser.dataDic objectForKey:@"dev"];
NSString *de = [parser.dataDic objectForKey:@"de"];
successAction(dev, de);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failureAction(101,@"网络连接超时");
}];
}
这样我们就根据业务封装了post的请求,同理如果需要传其他参数就只要方法多几个不同的参数即可