MVC设计模式的是一个在复杂应用设计中组织代码的公认模式,我将处理网络请求的Model分为了三种
- ModelR:实例对象键值对与入参所需内容相同,用于发起(Model Request)
- Model :实例对象键值对与回参所需内容相同,用于接收(Model Response)
- 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开发-网络-合理封装请求接口(三)真实案例
网友评论