美文网首页iOS开发
iOS开发-网络-合理封装请求接口(二)业务API接入实现

iOS开发-网络-合理封装请求接口(二)业务API接入实现

作者: Geniune | 来源:发表于2018-04-19 13:25 被阅读151次

    MVC设计模式的是一个在复杂应用设计中组织代码的公认模式,我将处理网络请求的Model分为了三种

    1. ModelR:实例对象键值对与入参所需内容相同,用于发起(Model Request)
    2. Model :实例对象键值对与回参所需内容相同,用于接收(Model Response)
    3. NetworkAPI :封装业务API,负责将ModelR转换并入参,发起请求,请求成功/失败后将回参字段映射成Model

    举个栗子,使用用户名:“admin”,密码:“123456”,POST接口http://example.com/?action=login,拿到token实现登录功能
    入参数据:

    {
        account = "admin";
        password = "123456";
    }
    

    回参数据:

    {
        data =     {
            token = "2c165baee7f20ca91";
        }
        message = "Success !";
        status = 200;
    }
    

    入参建模(ModelR):

    @interface LoginModelR : BaseModel
    
    @property (nonatomic, strong) NSString *account;//账号
    
    @property (nonatomic, strong) NSString *password;//密码
    
    @end
    

    回参建模(Model):

    @interface LoginModel : BaseModel
    
    @property (nonatomic, strong) NSString *token;//token
    
    @end
    

    实现业务API请求函数(NetworkAPI):

    + (void)login:(LoginModelR *)modelR success:(void(^)(LoginModel *model))success failure:(void(^)(HttpException * e))failure{
    
        NSString *API = @"[http://example.com/?action=login](http://example.com/?action=login)";
    
        NSDictionary *params = [modelR dictionaryModel]; //Model -> NSDictionary
    
        [HttpClientMgr post:API params:params success:^(id responseObj) {
    
            LoginModel *model = [LoginModel parse:responseObj]; //NSDictionary -> Model
    
            if(success){
                success(model);
            }
        } failure:^(HttpException *e) {
    
            if(failure){
                failure(e);
            }
        }];
    }
    

    使用账号密码登录功能不到十行代码即可实现

    LoginModelR *modelR = [LoginModelR new];
    modelR.account = @"admin";//账号
    modelR.password = @"123456";//密码
    
    [NetworkAPI login:modelR success:^(LoginModel *model) {
    
        //成功回调
        NSLog(@"success! Token:%@", model.token);//取得token
    } failure:^(HttpException *e) {
    
        //失败回调
        NSLog(@"failure! Reason:%@", e.message);//打印失败原因
    }];
    

    注意:http://example.com/?action=login仅作示例,请勿向其发起请求
    为了更好的理解,我将在下篇文章中使用一个真实案例来阐述如何使用
    链接:iOS开发-网络-合理封装请求接口(三)真实案例

    相关文章

      网友评论

        本文标题:iOS开发-网络-合理封装请求接口(二)业务API接入实现

        本文链接:https://www.haomeiwen.com/subject/zekwkftx.html