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 updateDRDNetworking的地方,添加#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文件。