DRDNetworking 0.6.1

DRDNetworking 0.6.1

测试已测试
语言语言 Obj-CObjective C
许可协议 MIT
发布最后发布2016年5月

Cendy Wang 维护。



  • 作者
  • cendywang

DRDNetworking 是一个可爱的网络库,它为您提供了一个便捷的方式来处理 API 请求,它不会侵犯您的项目,当您有一天移除它时,您不会遇到麻烦,即使这并不是我想要的。目前,我们正在使用 AFNetworking 3.0.0+ 与 Session Manager。
DRDNetworking 兼容 RESTFUL APIJSON-RPC API。如果您需要支持自己的 基于 JSON 的 RPC 调用,只需要几行代码即可!
更多详情,请运行仓库中的示例项目。

用法


安装

运行示例

要运行示例项目,请克隆仓库,然后首先从示例目录中运行 pod install

快速开始

  • 在您的 podfile 中,只需添加 pod 'DRDNetworking,然后运行 pod update
  • 在您想使用 DRDNetworking 的项目文件中,添加 #import "DRDNetworking.h"
  • 编写 API 代码以运行网络调用
DRDGeneralAPI *apiGet       = [[DRDGeneralAPI alloc] init];
apiGet.baseUrl              = @"http://ele.me";
apiGet.apiRequestMethodType = DRDRequestMethodTypeGET;
[apiGet setApiCompletionHandler:^(id responseObject, NSError * error) {
    // Your handle code
}];
[apiGet start];

代码详情


DRDAPIManager

DRDAPIManager 管理一个 DRDBaseAPI 对象。您可以发送一个 API 请求或一组 API 请求。此外,您可以取消之前发送的 API 请求。

DRDConfig

DRDConfig 是一个全局类,用于帮助我们维护整体行为。

    DRDConfig *networkConfig   = [[DRDConfig alloc] init];
    networkConfig.baseUrlStr   = @"https://httpbin.org";
    networkConfig.userAgent    = @"For example User-Agent";

    [[DRDAPIManager sharedDRDAPIManager] setConfiguration:networkConfig];
DRDAPIBatchAPIRequests

如果您需要同时发送一组 API,请使用 DRDAPIBatchAPIRequests

    DRDGeneralAPI *generalAPIGet = [[DRDGeneralAPI alloc] init];
    generalAPIGet.apiRequestMethodType = DRDRequestMethodTypeGET;
    generalAPIGet.baseUrl = self.baseURLStr;

    DRDGeneralAPI *generalAPIPost = [[DRDGeneralAPI alloc] init];
    generalAPIPost.apiRequestMethodType = DRDRequestMethodTypePOST;
    generalAPIPost.baseUrl = self.baseURLStr;

    DRDAPIBatchAPIRequests *batchRequests = [[DRDAPIBatchAPIRequests alloc] init];
    [batchRequests addAPIRequest:generalAPIGet];
    [batchRequests addAPIRequest:generalAPIPost];

    [[DRDAPIManager sharedDRDAPIManager] sendBatchAPIRequests:batchRequests];
DRDBaseAPI

DRDBaseAPI 是所有 API 请求对象的基础类。您将通过它的高级类来自定义 API 请求。

@implementation DRDAPIPostCall

#pragma mark - init
- (instancetype)init {
    self = [super init];
    if (self) {

    }
    return self;
}

#pragma mark - DRD
- (NSString *)customRequestUrl {
    return @"http://httpbin.org";
}

- (NSString *)requestMethod {
    return nil;
}

- (id)requestParameters {
    return nil;
}

- (DRDRequestMethodType)apiRequestMethodType {
    return DRDRequestMethodTypePOST;
}

- (id)apiResponseObjReformer:(id)responseObject andError:(NSError *)error {
    // refrom JSON response to your model object
    return responseObject;
}
DRDGeneralAPI

DRDGeneralAPI 通过避免从 DRDBaseAPI 继承来防止类爆炸。它为发送 API 请求提供了一种便捷的方式。

    DRDGeneralAPI *apiGeGet            = [[DRDGeneralAPI alloc] initWithRequestMethod:@"get"];
    apiGeGet.apiRequestMethodType      = DRDRequestMethodTypeGET;
    apiGeGet.apiRequestSerializerType  = DRDRequestSerializerTypeHTTP;
    apiGeGet.apiResponseSerializerType = DRDResponseSerializerTypeHTTP;
    [apiGeGet setApiCompletionHandler:^(id responseObject, NSError * error) {
        NSLog(@"responseObject is %@", responseObject);
        if (error) {
            NSLog(@"Error is %@", error.localizedDescription);
        }
    }];
    [apiGeGet start];
DRDRPCProtocol

DRDRPCProtocol 是您实现自定义 基于 JSON 的 RPC 协议 的方式。我们已经在示例中实现了 JSON-RPC 协议
查看它,并编写您自己的协议。

    DRDGeneralAPI *plusAPI = [[DRDGeneralAPI alloc]init];
    plusAPI.baseUrl        = @"http://www.raboof.com/projects/jayrock/demo.ashx?test";
    plusAPI.requestMethod  = @"add";
    plusAPI.requestParameters = @{
                                  @"a" : @(a),
                                  @"b" : @(b)
                                  };
    plusAPI.rpcDelegate    = [DRDJsonRpcVersionTwo sharedJsonRpcVersionTwo];
    __weak typeof(self) weakSelf = self;
    [plusAPI setApiCompletionHandler:^(NSNumber * responseObject, NSError * error) {
        if (error) {
            [[[UIAlertView alloc] initWithTitle:@"Error"
                                       message:[NSString stringWithFormat:@"%@", error.localizedDescription]
                                      delegate:nil
                             cancelButtonTitle:@"OK"
                              otherButtonTitles:nil, nil]show];
        } else {
            weakSelf.labelResult.text = [NSString stringWithFormat:@"%@", responseObject];
        }
    }];
    [plusAPI start];

中文说明

简介

DRDNetworking提供了一个方便实现API调用的网络库。
目前,内部使用AFNetworking 3.0.0+来简化JSONXML等网络序列化工作。

它有以下优势:

  1. 独立的网络层分工,易用且不断改进的API设计
  2. 支持RESTFULJSON-RPC及自定义RPC等通讯协议扩展
  3. 支持HTTP /2(iOS 9.0+)
  4. HTTP 1.1下,TCP/IP连接复用,优化网络连接
  5. 提供BaseAPI,减少ViewController层的代码量

安装

您可以使用CocoaPods来集成DRDNetworking
在您的Podfile里添加以下代码即可集成DRDNetworking

pod "DRDNetworking"

示例项目

我们提供了一个示例项目来帮助您更好地了解和使用DRDNetworkingclone下来代码,Scheme选择 DRDNetworking-Example即可运行。

快速开始

  • 在您的podfile中,添加pod "DRDNetworking",然后 pod update
  • 在您需要使用DRDNetworking的地方,添加#import "DRDNetworking.h"
  • 以下的代码能够快速帮您开启一个网络API调用:
DRDGeneralAPI *apiGet       = [[DRDGeneralAPI alloc] init];
apiGet.baseUrl              = @"http://ele.me";
apiGet.apiRequestMethodType = DRDRequestMethodTypeGET;
[apiGet setApiCompletionHandler:^(id responseObject, NSError * error) {
    // Your handle code
}];
[apiGet start];

更详细的用法,可以参考代码中.h文件。您是幸运的,目前所有文档都以中文撰写。

ChangeLog

v0.6.1

  • 为GeneralAPI添加ReformerDelegate
  • 添加网络错误观察者
  • 删除无用代码
  • 添加网络可达性检测
  • 添加自定义请求数据发送错误字符串
  • 修复bug

v0.5.2

  • RPC Delegate使相应API可用。

v0.5.1

  • 在一个队列中创建API

v0.5.0

  • 重复使用同一基础URL的请求来复用TCP/IP连接
  • 更方便的API设计
  • 更多单元测试以提高代码覆盖率

v0.4.0

  • 项目初始化

作者

王森林,[email protected]

贡献者

奥艾伦,[email protected]

许可

DRDNetworking遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。