测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可 | MIT |
发布上次发布 | 2017年9月 |
由Arclin维护。
依赖 | |
ReactiveCocoa | ~> 2.5 |
AFNetworking | >= 0 |
YYCache | >= 0 |
YYModel | >= 0 |
ALNetworking 是一个基于AFNetworking的框架。 只能在ReactiveCocoa(2.5版本)环境下使用。
RACSignal
,里面包含请求体和响应体,错误信息统一通过RACSubject
回调,你可以统一处理,例如弹出HUDALNetworkingResponse
),那么就会返回你的自定义响应体的对象,如果没有的话,那就是默认的ALNetworkingResponse
MVVM架构现在非常火爆,而ReactiveCocoa对于MVVM架构又非常适用,因此我想写一个针对RAC的网络层框架。
之后我会写一个Demo详细介绍MVVM结合这套框架的使用
如果你会使用RAC,那么你可以使用 merge:
concat:
zip:
等方法进行接口的串联、并联等,这对于一个界面有多个请求的需求非常有用。
将以下内容写入你的podfile
文件中
pod 'ALNetworking'
ALNetworking 是基于AFNetworking 3.x开发的。更多详情请查看AFNetworking README。
.
├── ALNetworking.h ................... 主要的入口文件
├── ALNetworking.m
├── ALNetworkingBaseManager.h .......... 真正的请求方法在里面
├── ALNetworkingBaseManager.m
├── ALNetworkingCache.h ............... 缓存类
├── ALNetworkingCache.m
├── ALNetworkingConfig.h ............... 一些全局的配置
├── ALNetworkingConfig.m
├── ALNetworkingConst.h ................ 一些枚举和常量
├── ALNetworkingConst.m
├── ALNetworkingDetail.html ............ 历史记录的展示模板
├── ALNetworkingRequest.h .............. 封装请求体
├── ALNetworkingRequest.m
├── ALNetworkingResponse.h ............. 封装响应体
├── ALNetworkingResponse.m
├── ALNetworkingViewController.h ....... 历史记录和webview的控制器
├── ALNetworkingViewController.m
├── NSDictionary+Log.m ................ 把一些URL编码的字符转成中文
├── UIViewController+ALExtension.h ..... 拦截viewDidApper 目的是为了加上手势
└── UIViewController+ALExtension.m
这里有一个简单的MVVM+RAC使用示例
url()
:请求时会在这个内容前面加上一个自定义的前缀拼接成URL,如果已经有https://
或者http://
前缀的话,就不会拼接自定义的前缀,如果这种处理方式不恰当,请告知我
params()
:传入一个字典作为参数
paramsDic()
:这是一个宏,将对象名作为键,对象的值作为字典的值
同理
url(xxx).paramsDic(a,b).method(ALNetworkRequestMethodPOST)
也可以写成 post(xxx,a,b)
等等
一些配置信息写在了AppDelegate中,请下载Demo查看
// example1
RACSignal *example1 = self.networking
.url_x(@"http://ip.taobao.com/service/getIpInfo.php")
.params(@{@"ip":@"192.168.0.103"})
.executeSignal();
// example1_1
NSString *ip = @"192.168.0.103";
RACSignal *example1_1 = self.networking
.url_x(@"http://ip.taobao.com/service/getIpInfo.php")
.paramsDic(ip)
.executeSignal();
// example1_2
RACSignal *example1_2 = self.networking
.url_x(@"http://ip.taobao.com/service/getIpInfo.php")
.paramsDic(ip)
.paramsType(ALNetworkRequestParamsTypeJSON)
.method(ALNetworkRequestMethodGET)
.executeSignal();
// example1_3
RACSignal *example1_3 = self.networking
.get_x(@"http://ip.taobao.com/service/getIpInfo.php",ip)
.paramsType(ALNetworkRequestParamsTypeJSON)
.executeSignal();
[example1 subscribeNext:^(RACTuple *x) {
ALNetworkingRequest *request = x.first;
ALNetworkingResponse *response = x.second;
NSLog(@"%@\n%zd\n%zd\n%@",request.urlStr,request.cacheStrategy,request.paramsType,response.rawData);
}];
NSString *Id = @"1";
NSString *name = @"22";
RACSignal *example2 = self.networking
.get(@"product/banner",Id,name)
.executeSignal();
// There are six cache stategies, you can find an API to try
RACSignal *example2_1 = self.networking
.get(@"product/banner",Id,name)
.cacheStrategy(ALCacheStrategy_AUTOMATICALLY)
.executeSignal();
[example2_1 subscribeNext:^(RACTuple *x) {
ALNetworkingRequest *request = x.first;
ALMyHTTPResponse *response = x.second;
NSLog(@"%@\n%zd\n%zd\n%@",request.urlStr,request.cacheStrategy,request.paramsType,response.rawData);
}];
ALNetworking 使用的是MIT证书,详情请查看LICENSE文件。
ALNetworking 是基于 AFNetworking 的网络框架,**仅适用于 ReactiveCocoa 环境**。由个人开发者开发。
RACSignal
,错误回调来自 RACSubject
MVVM 是一种流行的架构,而 ReactiveCocoa 是一个很好的 FRP(函数式响应式编程)框架。所以我想为 RAC 设计一个网络层框架。
根据 RAC,您可以使用 merge:
、concat:
以及 zip:
等操作来执行多个请求。这对于包含多个请求的页面非常有用。
要使用 ALNetworking,请在您的 Podfile 中添加以下内容
pod 'ALNetworking'
ALNetworking 基于 AFNetworking。您可以在 AFNetworking README 中找到更多关于版本兼容性的详细信息。
.
├── ALNetworking.h ................... Main Entrance
├── ALNetworking.m
├── ALNetworkingBaseManager.h .......... True Request Class
├── ALNetworkingBaseManager.m
├── ALNetworkingCache.h ............... Cache Class
├── ALNetworkingCache.m
├── ALNetworkingConfig.h ............... Some Global Config of Request and Response
├── ALNetworkingConfig.m
├── ALNetworkingConst.h ................ Enumerations and other const variables
├── ALNetworkingConst.m
├── ALNetworkingDetail.html ............ Template for request histories
├── ALNetworkingRequest.h .............. Encapsulation request
├── ALNetworkingRequest.m
├── ALNetworkingResponse.h ............. Encapsulation response
├── ALNetworkingResponse.m
├── ALNetworkingViewController.h ....... History viewController and WebViewController
├── ALNetworkingViewController.m
├── NSDictionary+Log.m ................ Conver url encode to Chinese
├── UIViewController+ALExtension.h ..... AOP. Add gesture when viewDidAppear
└── UIViewController+ALExtension.m
这里有一个简单示例,用于 MVVM+RAC
url()
:将前缀与内容结合作为URL,如果您有一个前缀为 https://
或 http://
,则不会附加自定义前缀。如果没有正确处理,请通知我。
params()
:输入一个字典作为参数
paramsDic()
:这是一个宏。使用对象名称作为键,对象值作为值
在相同的情况下
url(xxx).paramsDic(a,b).method(ALNetworkRequestMethodPOST)
可以写成 post(xxx,a,b)
等等。
一些配置消息写在 AppDelegate 中,请下载示例以查看
示例中还有一些信息,请下载示例阅读
// example1
RACSignal *example1 = self.networking
.url_x(@"http://ip.taobao.com/service/getIpInfo.php")
.params(@{@"ip":@"192.168.0.103"})
.executeSignal();
// example1_1
NSString *ip = @"192.168.0.103";
RACSignal *example1_1 = self.networking
.url_x(@"http://ip.taobao.com/service/getIpInfo.php")
.paramsDic(ip)
.executeSignal();
// example1_2
RACSignal *example1_2 = self.networking
.url_x(@"http://ip.taobao.com/service/getIpInfo.php")
.paramsDic(ip)
.paramsType(ALNetworkRequestParamsTypeJSON)
.method(ALNetworkRequestMethodGET)
.executeSignal();
// example1_3
RACSignal *example1_3 = self.networking
.get_x(@"http://ip.taobao.com/service/getIpInfo.php",ip)
.paramsType(ALNetworkRequestParamsTypeJSON)
.executeSignal();
[example1 subscribeNext:^(RACTuple *x) {
ALNetworkingRequest *request = x.first;
ALNetworkingResponse *response = x.second;
NSLog(@"%@\n%zd\n%zd\n%@",request.urlStr,request.cacheStrategy,request.paramsType,response.rawData);
}];
NSString *Id = @"1";
NSString *name = @"22";
RACSignal *example2 = self.networking
.get(@"product/banner",Id,name)
.executeSignal();
// There are six cache stategies, you can find an API to try
RACSignal *example2_1 = self.networking
.get(@"product/banner",Id,name)
.cacheStrategy(ALCacheStrategy_AUTOMATICALLY)
.executeSignal();
[example2_1 subscribeNext:^(RACTuple *x) {
ALNetworkingRequest *request = x.first;
ALMyHTTPResponse *response = x.second;
NSLog(@"%@\n%zd\n%zd\n%@",request.urlStr,request.cacheStrategy,request.paramsType,response.rawData);
}];
ALNetworking遵循MIT许可证。请参阅LICENSE文件获取更多信息。