iOS项目中的网络请求,格式与返回内容比较固定。而项目中常用的请求方法主要是GET和POST方法。且,由服务端返回的json格式也相对比较统一。而从服务端请求解析后的数据多与iOS端的model层对应。即,iOS调用网络接口api,返回数据,解析成对应的model数据。
在iOS中网络层大多用AFN框架,而模型解析层多用MJExtension框架。基于此,将网络解析层用这两个框架封装成一个。
KLNetManager
安装
pod 'KLNetManager'
封装说明
项目中的网络请求返回格式为统一的json数据,其返回体大致分为三类
- 返回数据类型是 模型数组(模型列表)
- 返回数据类型是 单个的模型(单个的词典,map)
- 返回数据类型为 成功或失败类型
以上的三种类别分别对应了三种回调状态
即:
- 返回模型列表(数组)的回调
typedef void(^RequestResultList)(KLRequestStatus success, NSArray *modelArray, KLRequestState *state);
- 返回单个模型的回调
typedef void(^RequestResultModel)(KLRequestStatus success, id model, KLRequestState *state);
- 返回字典的回调
typedef void(^RequestResultDict)(KLRequestStatus success, NSDictionary *dict, KLRequestState *state);
- 返回成功或失败
typedef void(^RequestResultComplete)(KLRequestStatus success, KLRequestState *state);
以上的回调中,其中KLRequestStatus
和KLRequestState *state
分别是
- 请求状态成功或失败的枚举值
typedef NS_ENUM(NSUInteger, KLRequestStatus) {
///失败
KLRequestFailure,
///成功
KLRequestSuccess
};
- 服务端返回的状态码和信息描述
@interface KLRequestState : NSObject
@property (assign, nonatomic) NSInteger code;
@property (strong, nonatomic) NSString *msg;
+ (instancetype)KLRequestState:(id)responseObject;
+ (instancetype)errorRequestState;
@end
项目中的请求方法主要为POST和GET, 基于以上,将网络请求封装如两大类8个方法:
POST请求方法
- 返回模型数组
/**
post请求 返回模型数组
@param urlString url
@param parameters parametr
@param modelClass 模型class
@param result 返回
*/
+ (void)Post:(NSString *)urlString
parameters:(id)parameters
modelClass:(Class)modelClass
resultList:(RequestResultList)result;
- 返回单个模型
/**
post请求 返回单个模型
@param urlString url
@param parameters parameter
@param modelClass model Class
@param result 返回的模型
*/
+ (void)Post:(NSString *)urlString
parameters:(id)parameters
modelClass:(Class)modelClass
resultModel:(RequestResultModel)result;
- 返回一个字典
/**
post请求 返回一个字典
@param urlString url
@param parameters parameers
@param result 返回的字典回调
*/
+ (void)Post:(NSString *)urlString
parameters:(id)parameters
resultDict:(RequestResultDict)result;
- 返回成功或失败
/**
post请求 返回成功或失败
@param urlString url
@param parameters parameter
@param result 返回成功或失败
*/
+ (void)Post:(NSString *)urlString
parameters:(id)parameters
resultComplete:(RequestResultComplete)result;
GET方法
get请求方法与post请求方法基本一致。
补充说明
手机端在调用服务端的api接口后,服务端传回的数据基本都是json数据,且格式也基本相同
{
"msg":"",
"code":200
"data":[]//手机端要解析的数据,根据业务场景可能是数组可能是字典
}
如果,服务端返回的不是这个结构,那么,这个框架可能并不是很适用于你的项目,你需要重新对数据做解析。
如果,你的服务端返回的是这个结构,但是,字段却不是这样的,可以通过KLNetManager
类中的方法类配置
- 设置后台返回的data字段
+ (void)configDataType:(NSString *)type;
- 设置后台 返回的状态码值
+ (void)configSuccessType:(NSInteger)type
- 设置msg字段
+ (void)configMsg:(NSString *)type;