基于AFNetworking和MJExtension封装的网络请求

iOS项目中的网络请求,格式与返回内容比较固定。而项目中常用的请求方法主要是GETPOST方法。且,由服务端返回的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);

以上的回调中,其中KLRequestStatusKLRequestState *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

项目中的请求方法主要为POSTGET, 基于以上,将网络请求封装如两大类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;

你可能感兴趣的:(基于AFNetworking和MJExtension封装的网络请求)