开源一个网络库ARHttpRequest,iOS适配NSURLSession/ASIHTTPRequest等,Android适配HttpURLConnection等

15 篇文章 0 订阅
8 篇文章 0 订阅

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值