OC版本的Moya插件网络架构
插件版网络请求架构,支持批量操作和链式操作
熟悉swift的朋友应该都知道一款优秀的三方库Moya,插件版网络请求是真香,于是乎借鉴思路制作一款纯oc版本的插件网络请求库
熟悉oc的朋友又应该都知道一款优秀的三方库YTKNetwork,基于对象的协议版网络请求,然后他的批量网络请求和链式网络请求也超级香
结合两者部分优点,制作一款纯OC版 批量 和 链式 插件版网络请求库。
目前整理九款插件:解析插件,缓存插件,配置自建证书插件,加载提示插件,修改请求插件,日志抓包插件,错误码插件,刷新插件,网络错误和空数据插件
- English Documents
功能清单
插件版网络请求可以更方便快捷的定制专属网络请求,并且支持批量操作,链式操作
主要功能清单如下:
- 支持基本的网络请求,下载上传文件
- 支持配置通用请求跟路径,通用参数等
- 支持设置加载和提示框插件
- 支持解析结果插件
- 支持网络缓存插件
- 支持配置自建证书插件
- 支持修改请求体和获取响应结果插件
- 支持网络日志抓包插件
- 支持刷新加载更多插件
- 支持错误码解析插件
- 支持错误和空数据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];
}
更多关于链式插件网络处理.
OC版本的Moya插件网络架构相关推荐
- 干货 | 云计算时代携程的网络架构变迁
作者简介 赵亚楠,携程云平台资深架构师.2016 年加入携程云计算部门,先后从事 OpenStack.SDN.容器网络(Mesos.K8S).容器镜像存储.分布式存储等产品的开发,目前带领 Ctrip ...
- 安全自动化企业网络架构 (毕设分享)
一.前言: 前段时间完成了自己的毕设项目--安全自动化企业网络架构.总的来说,该项目是一个对自己的挑战,其中涉及到Kubernetes容器云的搭建以及安全加固,DevOps CI/CD部署容器化监控平 ...
- 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)
文章目录 前言 一.Kubernetes诞生背景 1.云原生的概念 2.云原生架构 3.Kubernetes(k8s) 二.Kubernetes基本网络模型剖析 1.概念厘清 1.1 二层桥接 VS ...
- 卷积神经网络基础:(7)经典的网络架构
目录 经典网络架构: (1)Alexnet: (2)Vgg: (3)Resnet 经典网络架构: (1)Alexnet: 12年的经典之作,他是一个8层的网络,有5层的卷积,3层的全连接,其中的LRN ...
- 数据中心网络架构 — 云网一体化数据中心网络 — 算力网络 — SDN 架构
目录 文章目录 目录 算力网络 算力网络控制面技术 集中式算力网络控制面方案 分布式算力网络控制面方案 混合式架构方案 算力网络转发面及路由策略技术 算力网络 在 5G 及后 5G 时代,为了更迅捷高 ...
- 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例
前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 和 Android 7.0.0平台: cordova platform ...
- CNN网络架构演进:从LeNet到DenseNet
原文来源:https://www.cnblogs.com/skyfsm/p/8451834.html 卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从 ...
- DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构进行迁移学习
DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构迁移学习 目录 数据集 输出结果 设计思路 1.基模型 2.思路导图 核心代码 更多输出 数据集 Datas ...
- 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例 1
2019独角兽企业重金招聘Python工程师标准>>> 前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 ...
最新文章
- mvc框架实现的流程,值得收藏
- win10 uwp 毛玻璃
- vivado开发编译流程
- 【[SDOI2014]数数】
- Android 应用框架
- nginx配置静态文件过期时间
- Docker 数据管理介绍
- Dos批处理编程常用命令
- 数据库编程连接mysql_使用JDBC编程-连接MySQL数据库
- JDK8新特性(十三)之Optional
- keras调用自己训练的模型,并去掉全连接层
- TrueCrypt中文版怎么用?TrueCrypt使用方法及详细教程介绍
- 3D人脸重建:《Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network》
- java 怎样判断拼图是否可还原_拼图游戏可解性判断,自动生成可解拼图
- redis主从结构 主从从
- 刷单会入刑了你知道吗?四招教你迅速识别刷单!
- vue Cli3官网地址
- Vulkan 学习笔记
- SaaS与套装软件的“湿地”遭遇战
- 对程序员而言,有什么终身受用的底层知识?
热门文章