前言####
各位同路人晒来,小編首先聲明本文不是講什么AFN或者ASI什么的钞诡,而是借助于這些網(wǎng)絡請求框架(如:AFNetworing)來封裝我們自己項目的網(wǎng)絡請求框架。
為什么要封裝自己項目的網(wǎng)絡請求框架呢?(以AFNetworing為例)
1荧降、假如我們一直用的是AFNetworing接箫,假設有一天AFNetworing不能用了,那么我們的項目就要改改改朵诫,麻煩并且瑣碎辛友;
2、AFN網(wǎng)絡請求傳入的參數(shù)是字典剪返,得到的響應一般情況的也是JSON(可以設置)废累,但是我們是面向對象開發(fā),不是面向字典開發(fā)随夸,所以最好是都轉化為模型
3九默、返回錯誤碼有時需要統(tǒng)一處理等
映客源碼下載地址:高仿映客項目源碼
映客系列詳細解說目錄:映客系列詳細解說目錄
封裝AFNetworing的步驟#####
第一步
找到一個合適的解析框架(比如Mantle、MJExtension宾毒,本文采用Mantle)驼修,并且封裝為一個解析模型BaseModel
/**
* 模型轉化為字典
*/
- (NSDictionary *)modelToDictionary;
/**
* 字典轉化模型 (屬性值一一對應)
*/
+ (NSDictionary *)JSONKeyPathsByPropertyKey;
第二步
封裝三個基類模型BaseHttpModel(響應數(shù)據(jù)模型)、BaseResponseModel(響應模型)诈铛、BaseResquestModel(數(shù)據(jù)請求模型)乙各,這幾個基類模型都繼承于BaseModel
BaseResquestModel:請求模型包括請求URL、網(wǎng)絡請求模型參數(shù)轉化為字典參數(shù)功能
BaseResponseModel:響應模型一般包括code幢竹、data耳峦、message 字段響應(具體于服務器定義API文檔)
BaseHttpModel:響應的數(shù)據(jù)模型,具體是響應BaseResponseModel里面的data字段(具體可以和服務端定義)
第三步:
封裝請求工具類焕毫,具體可以包括功能和可以配置的參數(shù)蹲坷,具體實現(xiàn)可以下載demo,查看.m文件
//數(shù)據(jù)解析類型
typedef NS_ENUM(NSInteger,NetWorkResponseDataType)
{
NetWorkResponseDataType_JSON = 1, //JSON類型解析
NetWorkResponseDataType_XML = 2, //XML類型解析
NetWorkResponseDataType_Default = NetWorkResponseDataType_JSON,
};
//結果block
typedef void(^sucessResponseBlock)(id response);
typedef void(^failResponseBlock)(NSError *error);
@interface NetWorkResquestTool : NSObject
/**
* 請求超時時間,默認10s
*/
@property (nonatomic, assign) NSTimeInterval timeOut;
/**
* 響應回調隊列,默認主隊列
*/
@property (nonatomic, strong) dispatch_queue_t responseQueue;
/**
* 解析的數(shù)據(jù)類型,默認是 NetWorkResponseDataType_Default
*/
@property (nonatomic, assign) NetWorkResponseDataType responseDataType;
/**
* 統(tǒng)一的默認請求頭字典
*/
@property (nonatomic, strong) NSMutableDictionary *resquestDefaultHeadDict;
/**
* 請求參數(shù)模型
*/
@property (nonatomic, strong,readonly) BaseResquestModel *resquestModel;
/**
* 請求響應模型
*/
@property (nonatomic, strong,readonly) BaseResponseModel *responseModel;
#pragma mark - method
/**
* get請求
*
* @param requestModel 請求模型
* @param responseModel 響應模型
* @param sucessBlock 請求成功回調
* @param failBlock 請求失敗回調
*
* @return
*/
- (NSURLSessionDataTask *)httpGetWithModel:(BaseResquestModel *)requestModel
ResponseClass:(Class)responseClass
sucessResponse:(sucessResponseBlock)sucessBlock
failResponse:(failResponseBlock)failBlock;
/**
* Post請求
*
* @param requestModel 請求模型
* @param responseModel 響應模型
* @param sucessBlock 請求成功回調
* @param failBlock 請求失敗回調
*
* @return
*/
- (NSURLSessionDataTask *)httpPostWithModel:(BaseResquestModel *)requestModel
ResponseClass:(Class)responseClass
sucessResponse:(sucessResponseBlock)sucessBlock
failResponse:(failResponseBlock)failBlock;
第四步
打造我們所要用到的請求類BaseHttpDataManger
@interface BaseHttpDataManger : BaseDataManger
/**
* 發(fā)送給請求
*
* @param requestModel 請求模型
* @param responseModel 響應模型
* @param sucessBlock 成功
* @param failBlock 失敗
*
* @return
*/
- (NSURLSessionDataTask *)sendGetWithModel:(BaseResquestModel *)requestModel
ResponseClass:(Class)responseClass
sucessResponse:(sucessResponseBlock)sucessBlock
failResponse:(failResponseBlock)failBlock;
@end
第五步
封裝自己的錯誤管理類邑飒,用來處理返回的錯誤碼信息
映客源碼下載地址:高仿映客項目源碼
映客系列詳細解說目錄:映客系列詳細解說目錄