開源一個網絡庫ARHttpRequest,iOS適配NSURLSession/ASIHTTPRequest等,Android適配HttpURLConnection等

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章