ARHttpRequest
ARHttpRequest是一個網絡通信的適配層,對上層業務調用提供簡明接口,對下層具體網絡庫輕度包裝,並以適配器模式進行擴展和無縫替換。
Github地址:https://github.com/longjun3000/ARHttpRequest
ARHttpRequest產生背景和特點:
1、舊業務系統的維護和升級:適配器模式的設計,保持上層業務代碼的不變或少變,而下層具體網絡庫可以與時俱進和無縫更換。
2、實際項目開發的迭代:日常開發需要簡單、簡潔的網絡操作API,IHttpRequest接口正是由多年實際項目需要抽象進化而來。
3、多平臺規範的考慮:Android和iOS設計相對統一的適配接口規範,便於管理和維護。
4、ARHttpRequest目的是爲解決日常80%的繁瑣使用場景;另外20%複雜或特殊的場景請直接使用具體網絡庫的特定方式來操作。
ARHttpRequest現有的功能:
1、提供簡明的網絡操作API,包括get / post / postJson / postXml / postSoapXml / postFormData / downloadFile / uploadFile等。
2、downloadFile支持斷點續傳。
3、默認網絡操作都爲異步方式,提供完成/失敗的回調Block/函數,下載有進度狀態Block/函數。
4、提供簡潔的隊列操作方式,以及隊列完成的回調Block/函數。
5、ARHttpRequest實例類析構時自動釋放和清理相關對象的引用,上層代碼無需關注具體網絡庫的內存釋放問題。
6、iOS現提供NSURLSession和ASIHTTPRequest的適配器;Android現提供HttpURLConnection的適配器。
如何使用?
iOS
1、將編譯後的“ARHttpRequest.framework”加入您的項目工程;或將“ARHttpRequest”源碼文件夾內所有文件加入到您的項目工程中。
2、在需要的地方引入頭文件:framework形式引入:
#import <ARHttpRequest/IARHttpRequest.h>
#import <ARHttpRequest/ARHttpRequestASIAdapter.h>
#import <ARHttpRequest/ARHttpRequestSessionAdapter.h>
#import <ARHttpRequest/ARFormDataFile.h>
或者源碼形式引入:
#import "IARHttpRequest.h"
#import "ARHttpRequestASIAdapter.h"
#import "ARHttpRequestSessionAdapter.h"
#import "ARHttpRequest/ARFormDataFile.h"
3、代碼例子:
// 1 定義模塊級屬性變量
@property (nonatomic, strong) id<IARHttpRequest> httpRequest;
// 2 屬性get方法,以工廠方法模式創建IARHttpRequest實例
- (id<IARHttpRequest>)httpRequest
{
if (!_httpRequest) {
// 創建基於NSURLSession的適配器
_httpRequest = [[ARHttpRequestSessionAdapter alloc] init];
// // 創建基於ASIHTTPRequest的適配器
// _httpRequest = [[ARHttpRequestASIAdapter alloc] init];
}
return _httpRequest;
}
// 3 執行get操作
[self.httpRequest get:@"http://www.baidu.com" //請求url
tag:0 //本次請求的唯一標識符,如果有多個請求,請使用不同的tag
userInfo:nil //自己放的一些值,便於請求的回調函數中使用
finishedBlock:^(NSData *data, NSDictionary *userInfo) { //請求和響應結束的Block回調
//
NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@">>> data: %@", dataStr);
} failedBlock:^(NSError *error, NSDictionary *userInfo) { //請求失敗後的Block回調
//
NSLog(@">>> error: %@", error);
}
];
注:更多iOS範例請參考源碼“iOS/ARHttpRequestDemo”工程下的單元測試例子“ARHttpRequestTests.m”。
Android
private IHttpRequest mHttpRequest;
public IHttpRequest getHttpRequest() {
if (mHttpRequest == null) {
// 創建一個基於HttpURLConnection的適配器
mHttpRequest = new URLConnectionAdapter();
// 創建一個基於XXXX的適配器
// ...
}
return mHttpRequest;
}
// 測試GET
public void testGet() {
try {
String urlString = "http://www.baidu.com";
getHttpRequest().get(urlString, 0, 1000*15, new IHttpCallback() {
@Override
public void onFinished(String respString) {
System.out.println(respString);
}
@Override
public void onFailure(String errMsg) {
System.out.println(errMsg);
}
});
}
catch (Exception e) {
e.printStackTrace();
}
}
// 測試POST JSON
public void testPostJson() {
try {
String urlString = "http://192.168.1.100:3000/dev/mock/api/48e82320-efff-11e5-b524-8fc3522b1799/checkVersion";
getHttpRequest().postJson(urlString, 1, "{\"aaa\":\"111\"}", null, 1000*10, new IHttpCallback() {
@Override
public void onFinished(String respString) {
System.out.println(respString);
}
@Override
public void onFailure(String errMsg) {
System.out.println(errMsg);
}
});
}
catch (Exception e) {
e.printStackTrace();
}
}
注:更多Android範例請參看app項目下的單元測試“HttpRequestAppTest.java”,或者arlibrary模塊下的“HttpRequestUnitTest.java”。
ARHttpRequest Github地址:https://github.com/longjun3000/ARHttpRequest