TCNetwork
示例
要运行示例项目,请克隆仓库,并首先从 Example 目录运行 pod install
要求
ios9.0及更高版本
安装
TCNetwork 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile
pod 'TCNetwork'
字典转 model 需要额外添加:
pod 'TCJSONModel'
作者
xtuck, [email protected]
许可
TCNetwork在MIT许可下可用。更多信息请参阅LICENSE文件。
用法
部分用法在Api注释中和Demo注释中,demo中的数据我都是测试完毕后修改了,请自行使用真实的服务器配置信息进行调试。
Https请求调试不通的时候,需要在info.plist中进行配置
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
1·通过继承TCBaseApi,创建自己的api基类,在自己的api基类中编写通用配置和通用的处理逻辑。
需要调用http请求时,创建api接口类,继承自己的api基类。或者直接使用基类进行请求。
自定义基类请参考demo中的“MyBaseApi”类或“TCCoinBaseApi”类,接口请求类请参考demo中的“CheckVersionApi”类。
不需要重写的父类方法可以不写,调用接口请求时,不需要的参数可以不传。
//基类的主要设置,继承TCBaseApi,与TCBaseApi中相同的配置,可以省略。参考"MyBaseApi.m"
//可以重写 -(void)apiCustomConfig 方法统一设置
@implementation MyBaseApi
- (NSString *)codeKey {
return @"code";
}
- (NSString *)msgKey {
return @"msg";
}
- (NSString *)dataObjectKey {
return @"data";
}
//数组中的元素:number和string都可以
- (NSArray *)successCodes {
return @[@"0"];
}
@end
//接口创建,继承MyBaseApi
//不设置l_httpMethod时,默认的是TCHttp_POST
+ (TCBaseApi *)checkVersion {
NSMutableDictionary *params = NSMutableDictionary.maker.addKV(@"p1",@(1)).addKV(@"p2",@"2");
return self.apiInitURLJoin(self.baseUrl,@"appversion/ios",nil).l_params(params).l_httpMethod(TCHttp_GET);
}
//接口调用
[CheckVersionApi checkVersion].apiCall(^(CheckVersionApi *api){
NSLog(@"版本更新数据为:\n%@",[api.response description]);
});
//tableView列表请求示例
- (void)fetchListData:(RequestListDataFinishBlock)finishBlock {
NSMutableDictionary *params = NSMutableDictionary.maker;
params.addKV(@"pageNum",@(self.tableView.pageNumber));
params.addKV(@"pageSize",@(self.tableView.pageSize));
TCMyBaseApi.apiInitURLJoin(TCApiConfig.kApiBaseUrl,@"ums/api/ttp/imei/list".urlJoinDic(params),nil)
.l_parseModelClass_parseKey(TCCouponCodeModel.class,@"#.list()")
.apiCall(^(TCMyBaseApi *api) {
finishBlock(api.resultParseObject,api.error,0);
});
}
//直接创建接口并调用
NSMutableDictionary *params = NSMutableDictionary.maker;
params.addKV(@"organId",self.params[@"id"]);
TCMyBaseApi.apiInitURLJoin(TCApiConfig.kApiBaseUrl,@"navigation",nil)
.l_httpMethod(TCHttp_GET).l_params(params)
.l_parseModelClass(TCMapPositionModel.class)
.l_loadOnView(self.view)
.apiCallSuccess(^(TCMyBaseApi *api) {
self.mapPModel = api.resultParseObject;
//调用刷新UI逻辑
});
2·通过非继承的方式调用TCBaseApi
TCBaseApi.apiInitURLFull(@"https://httpbin.org/ip").l_httpMethod(TCHttp_GET).l_parseModelClass_parseKey(nil,@"origin").apiCallOriginal(^(TCBaseApi *api) {
NSString *ipStr = api.resultParseObject;
NSLog(@"获取到了ip地址:%@",ipStr);
});
常用主要参数调用
TCBaseApi.apiInitURLFull(<FullUrlStr>).l_params(<paramsDic>).apiCall(^(TCBaseApi *api){
//处理请求结果,通过对返回的api对象的属性error进行判空,来判断是否成功
});
注意
TCBaseApi中的HTTPManager是单例,如果不重写HTTPManager方法,在不同接口需要对manager进行差异化配置时,注意正确设置manager在不同接口下对应的配置
如果没有设置SessionManager的completionQueue和api的finishBackQueue,请求的返回数据会被切换到主线程返回,即:无论是主线程调用请求还是子线程调用请求,请求结果都会在主线程返回
TCBaseApi解析的返回数据,默认格式为NSDictionary,如果返回数据为其他格式,请调用.apiCallOriginal()自行解析返回数据
本框架的优势
1,通过链式编程的方式传递参数和调用方法,使得代码简洁又灵活,而且保持了接口调用的一致性,使得因编码造成的出错率非常小。
2,统一了请求中的toast相关的调用和显示,不必关心如何显示以及显示和隐藏的配对,大大简化了代码。
3,自定义DSL解析返回数据,也是大大简化了代码。(解析参数:l_parseModelClass_parseKey(,))。
4,实现了接口调用失败后需调用指定接口后,再重新调用该失败接口的相关逻辑。
5,更多优势,请在使用中去感受吧。