OC版本的Moya插件网络

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: OC版本的Moya插件网络

插件版网络请求架构,支持批量操作和链式操作


熟悉swift的朋友应该都知道一款优秀的三方库Moya,插件版网络请求是真香,于是乎借鉴思路制作一款纯oc版本的插件网络请求库


熟悉oc的朋友又应该都知道一款优秀的三方库YTKNetwork,基于对象的协议版网络请求,然后他的批量网络请求和链式网络请求也超级香


结合两者部分优点,制作一款纯OC版 批量 和 链式 插件版网络请求库。


目前整理九款插件:解析插件,缓存插件,配置自建证书插件,加载提示插件,修改请求插件,日志抓包插件,错误码插件,刷新插件,网络错误和空数据插件


功能清单


插件版网络请求可以更方便快捷的定制专属网络请求,并且支持批量操作,链式操作


主要功能清单如下:

支持基本的网络请求,下载上传文件

支持配置通用请求跟路径,通用参数等

支持设置加载和提示框插件

支持解析结果插件

支持网络缓存插件

支持配置自建证书插件

支持修改请求体和获取响应结果插件

支持网络日志抓包插件

支持刷新加载更多插件

支持错误码解析插件

支持错误和空数据UI展示插件

支持批量操作

支持链式网络请求


使用教程

基本使用教程

插件使用教程

批量网络使用教程

链式网络使用教程


Network版块


KJBaseNetworking:网络请求基类,基本的网络请求,上传下载文件等方法

/// 根路径地址
@property (nonatomic, strong, class) NSString *baseURL;
/// 基本参数,类似:userID,token等
@property (nonatomic, strong, class) NSDictionary *baseParameters;

KJNetworkingRequest:请求体,设置网络请求相关参数,其中包含参数,请求方式,插件等等

KJNetworkingResponse:响应请求结果,获取插件之间产生的数据等等

KJNetworkingType:汇总所有枚举和回调声明

KJNetworkBasePlugin:插件基类,插件父类

KJNetworkPluginManager:插件管理器,中枢神经

/// 插件版网络请求
/// @param request 请求体
/// @param success 成功回调
/// @param failure 失败回调
+ (void)HTTPPluginRequest:(KJNetworkingRequest *)request 
                  success:(KJNetworkPluginSuccess)success 
                  failure:(KJNetworkPluginFailure)failure;

KJNetworkingDelegate:插件协议,管理网络请求结果


目前抽离出以下5条协议方法,其中大致分为开始时刻、网络请求时刻、网络成功、网络失败、最终返回

/// 开始准备网络请求
/// @param request 请求相关数据
/// @param endRequest 是否结束下面的网络请求
/// @return 返回准备插件处理后的数据
- (KJNetworkingResponse *)prepareWithRequest:(KJNetworkingRequest *)request endRequest:(BOOL *)endRequest;
/// 网络请求开始时刻请求
/// @param request 请求相关数据
/// @param stopRequest 是否停止网络请求
/// @return 返回网络请求开始时刻插件处理后的数据
- (KJNetworkingResponse *)willSendWithRequest:(KJNetworkingRequest *)request stopRequest:(BOOL *)stopRequest;
/// 成功接收数据
/// @param request 请求相关数据
/// @param againRequest 是否需要再次请求该网络
/// @return 返回成功插件处理后的数据
- (KJNetworkingResponse *)succeedWithRequest:(KJNetworkingRequest *)request againRequest:(BOOL *)againRequest;
/// 失败处理
/// @param request 请求相关数据
/// @param againRequest 是否需要再次请求该网络
/// @return 返回失败插件处理后的数据
- (KJNetworkingResponse *)failureWithRequest:(KJNetworkingRequest *)request againRequest:(BOOL *)againRequest;
/// 准备返回给业务逻辑时刻调用
/// @param request 请求相关数据
/// @param error 错误信息
/// @return 返回最终加工之后的数据
- (KJNetworkingResponse *)processSuccessResponseWithRequest:(KJNetworkingRequest *)request error:(NSError **)error;


Plugins


目前已有13款插件供使用:

KJNetworkLoadingPlugin:加载动画插件

KJNetworkAnslysisPlugin:解析数据插件

KJNetworkCachePlugin:网络缓存插件

KJNetworkCertificatePlugin:配置自建证书插件

KJNetworkThiefPlugin:资源修改器插件

KJNetworkCapturePlugin:网络日志抓包插件

KJNetworkCodePlugin:错误码解析插件

KJNetworkRefreshPlugin:刷新加载更多插件

KJNetworkEmptyPlugin:错误信息和空数据UI展示插件

KJNetworkIndicatorPlugin:指示器插件

KJNetworkWarningPlugin:错误提示插件

KJNetworkSecretPlugin:密钥插件

KJNetworkZipPlugin:解压缩插件


Chain


链式网络请求其实主要用于管理有相互依赖的网络请求,它实际上最终可以用来管理多个拓扑排序后的网络请求。

// 测试链式网络请求
- (void)testChainNetworking{
    XCTestExpectation * expectation = [self expectationWithDescription:@"test chain."];
    KJNetworkingRequest * request = [[KJNetworkingRequest alloc] init];
    request.method = KJNetworkRequestMethodGET;
    request.ip = @"https://www.httpbin.org";
    request.path = @"/ip";
    request.responseSerializer = KJSerializerJSON;
    [KJNetworkChainManager HTTPChainRequest:request failure:^(NSError * error) {
        XCTFail(@"%@", error.localizedDescription);
    }]
    .chain(^__kindof KJNetworkingRequest * _Nullable(id _Nonnull responseObject) {
        KJNetworkingRequest * request = [[KJNetworkingRequest alloc] init];
        request.ip = @"https://www.httpbin.org";
        request.path = @"/post";
        request.params = {
            "ip": responseObject["origin"]
        };
        return request;
    })
    .lastChain(^(id  _Nonnull responseObject) {
        [expectation fulfill];
    });
    [self waitForExpectationsWithTimeout:300 handler:nil];
}

更多关于链式插件网络处理.👒👒


Batch


关于批量网络请求,提供设置最大并发数量,失败调用次数,错误重连时机等配置信息

// 测试批量网络请求
- (void)testBatchNetworking{
    XCTestExpectation * expectation = [self expectationWithDescription:@"test batch."];
    NSMutableArray * array = [NSMutableArray array];
    {
        KJNetworkingRequest * request = [[KJNetworkingRequest alloc] init];
        request.method = KJNetworkRequestMethodGET;
        request.path = @"/headers";
        request.responseSerializer = KJSerializerJSON;
        [array addObject:request];
    }{
        KJNetworkingRequest * request = [[KJNetworkingRequest alloc] init];
        request.method = KJNetworkRequestMethodGET;
        request.path = @"/ip";
        [array addObject:request];
    }
    KJBatchConfiguration * configuration = [KJBatchConfiguration sharedBatch];
    configuration.maxQueue = 3;
    configuration.requestArray = array.mutableCopy;
    [KJNetworkBatchManager HTTPBatchRequestConfiguration:configuration reconnect:^BOOL(NSArray<KJNetworkingRequest *> * _Nonnull reconnectArray) {
        return YES;
    } complete:^(NSArray<KJBatchResponse *> * _Nonnull result) {
        [expectation fulfill];
    }];
    [self waitForExpectationsWithTimeout:300 handler:nil];
}

更多关于批量插件网络处理.👒👒


最后


搞OC的小伙伴们推荐使用该插件KJNetworkPlugin

搞Siwft的小伙伴还是使用RxNetworks

再附上一个开发加速库KJCategoriesDemo地址 🎷  喜欢的老板们可以点个星🌟

传送门:KJNetworkPluginDemo

End .🎷

相关文章
|
27天前
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
41 4
|
3月前
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
118 3
Kubernetes网络插件体系及flannel基础
|
4月前
|
存储 canal Kubernetes
在K8S中,什么是CNI?平时K8s集群常用什么网络插件?
在K8S中,什么是CNI?平时K8s集群常用什么网络插件?
|
4月前
|
大数据 RDMA
神龙大数据加速引擎MRACC问题之MRACC-Spark利用eRDMA近网络优化插件来提升性能如何解决
神龙大数据加速引擎MRACC问题之MRACC-Spark利用eRDMA近网络优化插件来提升性能如何解决
46 0
|
5月前
|
缓存 安全 Web App开发
Chrome插件实现问题之网络进程接收到URL请求后会如何解决
Chrome插件实现问题之网络进程接收到URL请求后会如何解决
|
5月前
|
机器学习/深度学习 编解码 数据可视化
图神经网络版本的Kolmogorov Arnold(KAN)代码实现和效果对比
目前我们看到有很多使用KAN替代MLP的实验,但是目前来说对于图神经网络来说还没有类似的实验,今天我们就来使用KAN创建一个图神经网络Graph Kolmogorov Arnold(GKAN),来测试下KAN是否可以在图神经网络方面有所作为。
197 0
|
6月前
|
安全 数据可视化 JavaScript
【内网安全】域信息收集&应用网络凭据&CS插件&Adfind&BloodHound
【内网安全】域信息收集&应用网络凭据&CS插件&Adfind&BloodHound
105 1
|
6月前
|
机器学习/深度学习 JSON Kubernetes
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
469 0
|
6月前
|
机器学习/深度学习 JSON Kubernetes
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
74 0
|
7月前
|
网络协议 网络安全
在Windos Server 2016 版本配置网络参数和接入工作组网络
在Windos Server 2016 版本配置网络参数和接入工作组网络