iOS開發(fā)之網(wǎng)絡(luò)請(qǐng)求(基于AFNetworking的再封裝)

最近一直很忙也沒有什么時(shí)間寫博客了。放假了休息一下,就寫一篇博客來總結(jié)一下最近做項(xiàng)目中出現(xiàn)過的問題吧?。?!首先,在項(xiàng)目中我的起到了什么作用,無非就是把美工(UI設(shè)計(jì)師)給我們的圖顯示出來,然后再和服務(wù)器進(jìn)行交互。那個(gè)我們和服務(wù)器怎么交互呢?最簡單的方式就是說話唄,但是我們要跟服務(wù)器說話必須通過我們彼此能聽的懂的話來交流,也就需要制定很多的協(xié)議了(http,tcp,udp等,這個(gè)有興趣的朋友可以了解一下網(wǎng)絡(luò)協(xié)議的東西)。但是我平常最常使用的還是http協(xié)議。http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html 這篇博客詳細(xì)講解了http協(xié)議的東西(我能說是我隨便百度了一篇博客嗎?)然后github上的AFNetworking應(yīng)該現(xiàn)在是應(yīng)用的最廣泛的網(wǎng)絡(luò)請(qǐng)求三方庫了吧。那么今天就來說一下AFNetworing。既然人家已經(jīng)封裝的這么好了,我們?yōu)槭裁催€要多此一舉再封裝呢?那現(xiàn)在就來說一下再封裝的意義是什么?最重要的意義差不多就是統(tǒng)一接口(這個(gè)也是封裝的一個(gè)作用,如果不了解封裝的同學(xué)可以去看看封裝的用處,是個(gè)提高效率的非常有效的辦法),這一點(diǎn)要是再多人項(xiàng)目中尤其能體現(xiàn)出來,我的一個(gè)同事用的是系統(tǒng)自帶的MKNetworking,很多人可能聽都沒聽過,他雖然用的很好,我也能看的懂,但是還是感覺看起來很難受,因?yàn)槲腋静幌肟吹剿木唧w用法和實(shí)現(xiàn)是什么樣子的(雖然真正敲起來可能也只是多了兩行代碼而已),只需要調(diào)一個(gè)接口就什么都用了不就好了,為什么還要敲那么多重復(fù)的代碼呢(Don't repeat yourself)?好,下面我就來對(duì)AFNetworking再封裝:首先,還是說一下封裝的事情,如果是你自己用,那么你可以隨便寫一寫,因?yàn)槟悴挥米⑨屢材芸吹亩?。但是如果是給幾個(gè)人用,你可以直接告訴他們,或者說是寫一個(gè)比較詳細(xì)的注釋,以便他們?nèi)蘸笸浟丝匆幌戮椭烂總€(gè)參數(shù)的意義是什么了?。。∧敲次以诰W(wǎng)絡(luò)請(qǐng)求的時(shí)候究竟最常用的網(wǎng)絡(luò)請(qǐng)求有哪些呢?我最常用到的就是get,post和upload了。(這幾中請(qǐng)求方式也可以去了解一下他們的區(qū)別)說了這么多的廢話了來點(diǎn)干貨。@interface UploadParam : NSObject/** *? 圖片的二進(jìn)制數(shù)據(jù) */@property (nonatomic, strong) NSData *data;/** *? 服務(wù)器對(duì)應(yīng)的參數(shù)名稱 */@property (nonatomic, copy) NSString *name;/** *? 文件的名稱(上傳到服務(wù)器后,服務(wù)器保存的文件名) */@property (nonatomic, copy) NSString *filename;/** *? 文件的MIME類型(image/png,image/jpg等) */@property (nonatomic, copy) NSString *mimeType;@end@class UploadParam;/** *? 網(wǎng)絡(luò)請(qǐng)求類型 */typedef NS_ENUM(NSUInteger,HttpRequestType) {? ? /**? ? *? get請(qǐng)求? ? */? ? HttpRequestTypeGet = 0,? ? /**? ? *? post請(qǐng)求? ? */? ? HttpRequestTypePost};@interface HttpRequest : NSObject/** *? 發(fā)送get請(qǐng)求 * *? @param URLString? 請(qǐng)求的網(wǎng)址字符串 *? @param parameters 請(qǐng)求的參數(shù) *? @param success? ? 請(qǐng)求成功的回調(diào) *? @param failure? ? 請(qǐng)求失敗的回調(diào) */+ (void)getWithURLString:(NSString *)URLString? ? ? ? ? ? ? parameters:(id)parameters? ? ? ? ? ? ? ? success:(void (^)(id responseObject))success? ? ? ? ? ? ? ? failure:(void (^)(NSError *error))failure;/** *? 發(fā)送post請(qǐng)求 * *? @param URLString? 請(qǐng)求的網(wǎng)址字符串 *? @param parameters 請(qǐng)求的參數(shù) *? @param success? ? 請(qǐng)求成功的回調(diào) *? @param failure? ? 請(qǐng)求失敗的回調(diào) */+ (void)postWithURLString:(NSString *)URLString? ? ? ? ? ? ? parameters:(id)parameters? ? ? ? ? ? ? ? ? success:(void (^)(id responseObject))success? ? ? ? ? ? ? ? ? failure:(void (^)(NSError *error))failure;/** *? 發(fā)送網(wǎng)絡(luò)請(qǐng)求 * *? @param URLString? 請(qǐng)求的網(wǎng)址字符串 *? @param parameters? 請(qǐng)求的參數(shù) *? @param type? ? ? ? 請(qǐng)求的類型 *? @param resultBlock 請(qǐng)求的結(jié)果 */+ (void)requestWithURLString:(NSString *)URLString? ? ? ? ? ? ? ? ? parameters:(id)parameters? ? ? ? ? ? ? ? ? ? ? ? type:(HttpRequestType)type? ? ? ? ? ? ? ? ? ? success:(void (^)(id responseObject))success? ? ? ? ? ? ? ? ? ? failure:(void (^)(NSError *error))failure;/** *? 上傳圖片 * *? @param URLString? 上傳圖片的網(wǎng)址字符串 *? @param parameters? 上傳圖片的參數(shù) *? @param uploadParam 上傳圖片的信息 *? @param success? ? 上傳成功的回調(diào) *? @param failure? ? 上傳失敗的回調(diào) */+ (void)uploadWithURLString:(NSString *)URLString? ? ? ? ? ? ? ? parameters:(id)parameters? ? ? ? ? ? ? ? uploadParam:(UploadParam *)uploadParam? ? ? ? ? ? ? ? ? ? success:(void (^)())success? ? ? ? ? ? ? ? ? ? failure:(void (^)(NSError *error))failure;#import "HttpRequest.h"#import "AFNetworking.h"#import "UploadParam.h"@implementation HttpRequest#pragma mark -- GET請(qǐng)求 --+ (void)getWithURLString:(NSString *)URLString? ? ? ? ? ? ? parameters:(id)parameters? ? ? ? ? ? ? ? success:(void (^)(id))success? ? ? ? ? ? ? ? failure:(void (^)(NSError *))failure {? ? ? ? AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];? ? /**? ? *? 可以接受的類型? ? */? ? manager.responseSerializer = [AFHTTPResponseSerializer serializer];? ? /**? ? *? 請(qǐng)求隊(duì)列的最大并發(fā)數(shù)? ? *///? ? manager.operationQueue.maxConcurrentOperationCount = 5;? ? /**? ? *? 請(qǐng)求超時(shí)的時(shí)間? ? *///? ? manager.requestSerializer.timeoutInterval = 5;? ? [manager GET:URLString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {? ? ? ? if (success) {? ? ? ? ? ? success(responseObject);? ? ? ? }? ? } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {? ? ? ? if (failure) {? ? ? ? ? ? failure(error);? ? ? ? }? ? }];}#pragma mark -- POST請(qǐng)求 --+ (void)postWithURLString:(NSString *)URLString? ? ? ? ? ? ? parameters:(id)parameters? ? ? ? ? ? ? ? ? success:(void (^)(id))success? ? ? ? ? ? ? ? ? failure:(void (^)(NSError *))failure {? ? ? ? AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];? ? manager.responseSerializer = [AFHTTPResponseSerializer serializer];? ? [manager POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {? ? ? ? if (success) {? ? ? ? ? ? success(responseObject);? ? ? ? }? ? } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {? ? ? ? if (failure) {? ? ? ? ? ? failure(error);? ? ? ? }? ? }];}#pragma mark -- POST/GET網(wǎng)絡(luò)請(qǐng)求 --+ (void)requestWithURLString:(NSString *)URLString? ? ? ? ? ? ? ? ? parameters:(id)parameters? ? ? ? ? ? ? ? ? ? ? ? type:(HttpRequestType)type? ? ? ? ? ? ? ? ? ? success:(void (^)(id))success? ? ? ? ? ? ? ? ? ? failure:(void (^)(NSError *))failure {? ? ? ? AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];? ? manager.responseSerializer = [AFHTTPResponseSerializer serializer];? ? switch (type) {? ? ? ? case HttpRequestTypeGet:? ? ? ? {? ? ? ? ? ? [manager GET:URLString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {? ? ? ? ? ? ? ? if (success) {? ? ? ? ? ? ? ? ? ? success(responseObject);? ? ? ? ? ? ? ? }? ? ? ? ? ? } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {? ? ? ? ? ? ? ? if (failure) {? ? ? ? ? ? ? ? ? ? failure(error);? ? ? ? ? ? ? ? }? ? ? ? ? ? }];? ? ? ? }? ? ? ? ? ? break;? ? ? ? case HttpRequestTypePost:? ? ? ? {? ? ? ? ? ? [manager POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {? ? ? ? ? ? ? ? if (success) {? ? ? ? ? ? ? ? ? ? success(responseObject);? ? ? ? ? ? ? ? }? ? ? ? ? ? } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {? ? ? ? ? ? ? ? if (failure) {? ? ? ? ? ? ? ? ? ? failure(error);? ? ? ? ? ? ? ? }? ? ? ? ? ? }];? ? ? ? }? ? ? ? ? ? break;? ? }}#pragma mark -- 上傳圖片 --+ (void)uploadWithURLString:(NSString *)URLString? ? ? ? ? ? ? ? parameters:(id)parameters? ? ? ? ? ? ? ? uploadParam:(UploadParam *)uploadParam? ? ? ? ? ? ? ? ? ? success:(void (^)())success? ? ? ? ? ? ? ? ? ? failure:(void (^)(NSError *))failure {? ? ? ? AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];? ? manager.responseSerializer = [AFHTTPResponseSerializer serializer];? ? [manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id_Nonnull formData) {

[formData appendPartWithFileData:uploadParam.data name:uploadParam.name fileName:uploadParam.filename mimeType:uploadParam.mimeType];

} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {

if (success) {

success(responseObject);

}

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

if (failure) {

failure(error);

}

}];

}

我把我的demo也傳到我的空間,歡迎大家下載。我用的是cocospod三方庫,如果下載了不能使用的,也可以聯(lián)系我!

來自: http://www.cnblogs.com/wuhongxing/p/5094634.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容