DRDNetworking 是一个可爱的网络库,它为您提供了一个便捷的方式来处理 API 请求,它不会侵犯您的项目,当您有一天移除它时,您不会遇到麻烦,即使这并不是我想要的。目前,我们正在使用 AFNetworking 3.0.0+ 与 Session Manager。
DRDNetworking 兼容 RESTFUL API
和 JSON-RPC API
。如果您需要支持自己的 基于 JSON 的 RPC 调用
,只需要几行代码即可!
更多详情,请运行仓库中的示例项目。
要运行示例项目,请克隆仓库,然后首先从示例目录中运行 pod install
。
pod 'DRDNetworking
,然后运行 pod update
。#import "DRDNetworking.h"
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
管理一个 DRDBaseAPI
对象。您可以发送一个 API 请求或一组 API 请求。此外,您可以取消之前发送的 API 请求。
DRDConfig
是一个全局类,用于帮助我们维护整体行为。
DRDConfig *networkConfig = [[DRDConfig alloc] init];
networkConfig.baseUrlStr = @"https://httpbin.org";
networkConfig.userAgent = @"For example User-Agent";
[[DRDAPIManager sharedDRDAPIManager] setConfiguration:networkConfig];
如果您需要同时发送一组 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
是所有 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
通过避免从 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
是您实现自定义 基于 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+
来简化JSON
、XML
等网络序列化工作。
它有以下优势:
API
设计RESTFUL
、JSON-RPC
及自定义RPC
等通讯协议扩展HTTP /2
(iOS 9.0+
)HTTP 1.1
下,TCP/IP
连接复用,优化网络连接BaseAPI
,减少ViewController
层的代码量您可以使用CocoaPods来集成DRDNetworking
。
在您的Podfile
里添加以下代码即可集成DRDNetworking
pod "DRDNetworking"
我们提供了一个示例项目来帮助您更好地了解和使用DRDNetworking
。 clone
下来代码,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
文件。您是幸运的,目前所有文档都以中文撰写。
DRDNetworking遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。