封装网络请求

网络请求类的封装思想:鄙人理解是,就是在AFNetWorking或者MKNetWork的基础上在封装一层,抽离出一个中间层。如果项目以后需要换网络请求,我们只在中间层修改,项目中的网络请求不用修改,这也就是封装的好处吧

1.1首先拿到后台的文档,仔细阅读文档,注意接口参数的说明(哪些参数是必传,哪些参数是可选项)

1.2请求及时间的格式

1.3接口的请求方式(一般是GET POST请求)

1.4接口响应数据的格式(一般是以Json格式返回数据)

1.5接口输出状态的说明(成功返回什么,失败返回什么)

1.6注意接口的地址

以上信息看完以后,我们必须在xcode中来完成以下操作

2.1首先把AFNetWorking网络请求类导入到工程中,编译xcode看有没有错误(如果有错误检查排除)

2.2创建一个网络请求类,(这个网络请求类可以继承NSObject或者

AFHTTPRequestOperationManager

)也应该可以

例如:网络请求类:鄙人命名为这个,

ELifeNetAPIClient

在这个类的.h文件中,写一个单例方法

+ (instancetype)sharedClient;(用单例的好处就是,保证网络请求类在这个类中之创建一次,避免资源浪费)

2.2.1然后POST请求 GET请求 各自写一个方法

POST 

/**

 * 请求方法

 * NOTE: 使用POST方式

 */

- (AFHTTPRequestOperation*)requestPostWithType:(NSString*)type args:(NSDictionary*)args success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure;

GET

/**

 * 请求方法

 * NOTE: 使用GET方式

 */

- (AFHTTPRequestOperation*)requestGetWithType:(NSString*)type args:(NSDictionary*)args success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure;

写完以上方法后在.m文件中实现以上三个方法

首先是单例  

+ (instancetype)sharedClient

{

    static ELifeNetAPIClient *_sharedClient = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        _sharedClient = [[ELifeNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:NetAPIBaseURLString]];

    });

    

    return _sharedClient;

}

其次POST方法

- (AFHTTPRequestOperation *)requestPostWithType:(NSString*)type args:(NSDictionary*)args success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure

{

    AFHTTPRequestOperation* op = [self POST:type

                                 parameters:args

                                    success:^(AFHTTPRequestOperation *operation, id responseObject) {

                                        NSLog(@"data=%@",operation.responseString);

                                        assert([responseObject isKindOfClass:NSDictionary.class]);

                                        NSError* error = nil;

                                        NSString *status = [responseObject objectForKey:@"respCode"];

                                        NSString *message = [responseObject objectForKey:@"respMsg"];

                                        if ([status isEqualToString:@"0000"]) {

                                            success(responseObject);

                                            

                                        }else{

                                            error = [NSError errorWithDomain:message code:[status integerValue] userInfo:nil];

                                            failure(error);

                                        }

                                        

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

                                        error = [NSError errorWithDomain:@"网络错误" code:9999 userInfo:nil];

                                        NSLog(@"error: %@", error.description);

                                        failure(error);

                                    }];

    return op;

}

 最后GET方法

- (AFHTTPRequestOperation*)requestGetWithType:(NSString*)type args:(NSDictionary*)args success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure

{

    NSLog(@"path=%@ args:%@", type, args);

    AFHTTPRequestOperation* op =[self GET:type

                               parameters:args

                                  success:^(AFHTTPRequestOperation *operation, id responseObject) {

                                      

                                      NSLog(@"data=%@", responseObject);

                                      assert([responseObject isKindOfClass:NSDictionary.class]);

                                      NSError* error = nil;

                                      

                                      NSString *status = [responseObject objectForKey:@"respCode"];

                                      NSString *message = [responseObject objectForKey:@"respMsg"];

                                      

                                      if ([status isEqualToString:@"0000"]) {

                                          success(responseObject);

                                          

                                      }else{

                                          error = [NSError errorWithDomain:message code:[status integerValue] userInfo:nil];

                                          NSLog(@"error: %@", error.domain);

                                          failure(error);

                                      }

                            

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

                                      error = [NSError errorWithDomain:@"网络错误" code:9999 userInfo:nil];

                                      NSLog(@"error: %@", error.description);

                                      failure(error);

                                  }];

    return op;

}

 3.0在创建一个类用于封装网络的接口

1
原文地址:https://www.cnblogs.com/fantasy3588/p/4699761.html