zoukankan      html  css  js  c++  java
  • 封装网络请求

    网络请求类的封装思想:鄙人理解是,就是在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
  • 相关阅读:
    分析drawImplementation(osg::RenderInfo& renderInfo,RenderLeaf*& previous)
    osg求交,模型矩阵
    Opengl RC(Render context,渲染上下文)与像素格式
    osg渲染属性和opengl的接口分析
    opengl累积缓存
    weekly review 200946: NON Memory
    推荐:每周影评2009国产电影回顾
    [Study Note] Dependency Injection and Inversion of Control
    [Study Note] TDD: Consistent test structure (测试代码的结构一致性)
    海淀驾校学车考证经历(二)第一次上车
  • 原文地址:https://www.cnblogs.com/fantasy3588/p/4699761.html
Copyright © 2011-2022 走看看