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

  • 熟悉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插件网络架构相关推荐

  1. 干货 | 云计算时代携程的网络架构变迁

    作者简介 赵亚楠,携程云平台资深架构师.2016 年加入携程云计算部门,先后从事 OpenStack.SDN.容器网络(Mesos.K8S).容器镜像存储.分布式存储等产品的开发,目前带领 Ctrip ...

  2. 安全自动化企业网络架构 (毕设分享)

    一.前言: 前段时间完成了自己的毕设项目--安全自动化企业网络架构.总的来说,该项目是一个对自己的挑战,其中涉及到Kubernetes容器云的搭建以及安全加固,DevOps CI/CD部署容器化监控平 ...

  3. 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)

    文章目录 前言 一.Kubernetes诞生背景 1.云原生的概念 2.云原生架构 3.Kubernetes(k8s) 二.Kubernetes基本网络模型剖析 1.概念厘清 1.1 二层桥接 VS ...

  4. 卷积神经网络基础:(7)经典的网络架构

    目录 经典网络架构: (1)Alexnet: (2)Vgg: (3)Resnet 经典网络架构: (1)Alexnet: 12年的经典之作,他是一个8层的网络,有5层的卷积,3层的全连接,其中的LRN ...

  5. 数据中心网络架构 — 云网一体化数据中心网络 — 算力网络 — SDN 架构

    目录 文章目录 目录 算力网络 算力网络控制面技术 集中式算力网络控制面方案 分布式算力网络控制面方案 混合式架构方案 算力网络转发面及路由策略技术 算力网络 在 5G 及后 5G 时代,为了更迅捷高 ...

  6. 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例

    前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 和 Android 7.0.0平台: cordova platform ...

  7. CNN网络架构演进:从LeNet到DenseNet

    原文来源:https://www.cnblogs.com/skyfsm/p/8451834.html 卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从 ...

  8. DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构进行迁移学习

    DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构迁移学习 目录 数据集 输出结果 设计思路 1.基模型 2.思路导图 核心代码 更多输出 数据集 Datas ...

  9. 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例 1

    2019独角兽企业重金招聘Python工程师标准>>> 前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 ...

最新文章

  1. mvc框架实现的流程,值得收藏
  2. win10 uwp 毛玻璃
  3. vivado开发编译流程
  4. 【[SDOI2014]数数】
  5. Android 应用框架
  6. nginx配置静态文件过期时间
  7. Docker 数据管理介绍
  8. Dos批处理编程常用命令
  9. 数据库编程连接mysql_使用JDBC编程-连接MySQL数据库
  10. JDK8新特性(十三)之Optional
  11. keras调用自己训练的模型,并去掉全连接层
  12. TrueCrypt中文版怎么用?TrueCrypt使用方法及详细教程介绍
  13. 3D人脸重建:《Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network》
  14. java 怎样判断拼图是否可还原_拼图游戏可解性判断,自动生成可解拼图
  15. redis主从结构 主从从
  16. 刷单会入刑了你知道吗?四招教你迅速识别刷单!
  17. vue Cli3官网地址
  18. Vulkan 学习笔记
  19. SaaS与套装软件的“湿地”遭遇战
  20. 对程序员而言,有什么终身受用的底层知识?

热门文章

  1. 黑土地,你让我如此心醉
  2. NSIS进阶教程(一)~(五)
  3. 用java编写连连看_用java语言编写连连看游戏
  4. 并发编程 Java 三把锁(Synchronized、ReentrantLock、ReadWriteLock)
  5. shell_day1
  6. 02、【solidworks】solidworks下载重装可能遇到的问题尤其是注册表访问问题
  7. 黑马程序员 银行业务调度系统
  8. 各大牛逼网站推荐系统
  9. 空间与运动——模拟太阳系、牧师与魔鬼游戏实现详解
  10. IOS中删除文件和文件夹