ALNetworking 1.1.1

ALNetworking 1.1.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布上次发布2017年9月

Arclin维护。



 
依赖
ReactiveCocoa~> 2.5
AFNetworking>= 0
YYCache>= 0
YYModel>= 0
 

  • 作者:
  • Arclin

英文版本

这是什么

ALNetworking 是一个基于AFNetworking的框架。 只能在ReactiveCocoa(2.5版本)环境下使用

特性

  1. 支持6种缓存方式,可以满足很多业务需求(基于 YYCache
  2. 你可以按住屏幕两秒左右或自定义手势,以显示你的历史请求,方便调试
  3. 链式调用,为了让代码更加美观
  4. 如果服务器抛出了异常界面,框架会直接弹出界面以展示异常信息(如果开启了Debug模式),方便后端人员调试
  5. 你可以使用自定义的响应体类,框架会自动帮你进行转换(基于 YYModel
  6. 成功的回调框架会返回RACSignal,里面包含请求体和响应体,错误信息统一通过RACSubject回调,你可以统一处理,例如弹出HUD
  7. 关于响应体,如果你有自定义响应体(建议继承自ALNetworkingResponse),那么就会返回你的自定义响应体的对象,如果没有的话,那就是默认的ALNetworkingResponse
  8. 查看demo,里面有详细的注释,可以帮助你使用框架

为什么只能在ReactiveCocoa环境下使用

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():请求时会在这个内容前面加上一个自定义的前缀拼接成URL,如果已经有https://或者http://前缀的话,就不会拼接自定义的前缀,如果这种处理方式不恰当,请告知我

params() & paramsDic()

params():传入一个字典作为参数

paramsDic():这是一个宏,将对象名作为键,对象的值作为字典的值

url(xxx).paramsDic(a,b).method(ALNetworkRequestMethodGET) ===> get(xxx,a,b)

同理

url(xxx).paramsDic(a,b).method(ALNetworkRequestMethodPOST) 也可以写成 post(xxx,a,b)

等等

一些配置信息写在了AppDelegate中,请下载Demo查看

example1

 // 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);
}];

示例2 (尝试使用缓存策略)

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文件。




What

ALNetworking 是基于 AFNetworking 的网络框架,**仅适用于 ReactiveCocoa 环境**。由个人开发者开发。

特性

  1. 支持6种缓存策略,可以满足各种业务需求。(基于 YYCache 框架)
  2. 支持检查请求历史记录,您可以按屏幕大约2秒钟来显示历史视图,或者您可以自定义自己的手势。
  3. 支持链式命令,这有助于提高可读性。
  4. 支持将响应数据自动转换为自定义类。(基于 YYModel 框架)
  5. 如果服务器发生错误,并且您已开启调试模式,它将显示一个带有 UIWebView 的视图控制器来显示错误页面。如果你的服务器是用 ThinkPHP 或 Express 构建,这个功能非常有用。
  6. 成功回调来自 RACSignal,错误回调来自 RACSubject
  7. 成功回调 —— RACSignal,其中包含一个 RACTuple 对象,它包含一个 ALNetworkingRequest 和一个 ALNetworkingResponse,如果您已经配置了一个自定义的响应类,ALNetworkingResponse 将被替换为您的响应类。

为什么仅选择 ReactiveCocoa

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():将前缀与内容结合作为URL,如果您有一个前缀为 https://http://,则不会附加自定义前缀。如果没有正确处理,请通知我。

params() & paramsDic()

params():输入一个字典作为参数

paramsDic():这是一个宏。使用对象名称作为键,对象值作为值

url(xxx).paramsDic(a,b).method(ALNetworkRequestMethodGET) ===> get(xxx,a,b)

在相同的情况下

url(xxx).paramsDic(a,b).method(ALNetworkRequestMethodPOST) 可以写成 post(xxx,a,b)

等等。

一些配置消息写在 AppDelegate 中,请下载示例以查看

示例中还有一些信息,请下载示例阅读

示例1

 // 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);
}];

示例2(尝试使用缓存策略)

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文件获取更多信息。