KJNetworkPluginManager插件版网络请求库

联合创作 · 2023-09-27 09:11

KJNetworkPlugin 是一款基于面向协议的网络抽象层的插件版网络请求库,基于AFNetworking的基础上再次封装使用。



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

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

  • 结合一下两者优点,制作一款批量链式插件版网络请求库

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


功能清单


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


主要功能清单如下:



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

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

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

  • 支持解析结果插件

  • 支持网络缓存插件

  • 支持配置自建证书插件

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

  • 支持网络日志抓包插件

  • 支持刷新加载更多插件

  • 支持错误码解析插件

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

  • 支持批量操作

  • 支持链式网络请求


使用教程



模块组成


简单讲应该分为这么几大板块:



  • Chain:链式插件版网络请求

  • Batch:批量插件版网络请求

  • Network:插件管理器和网络请求基类

  • Plugins:插件集合,目前已有5款插件供使用   - Loading:加载错误提示插件   - Anslysis:数据解析插件   - Cache:缓存插件   - Certificate:自建证书插件   - Thief:修改器插件   - Capture:网络日志抓包插件   - Code:错误码插件   - Refresh:刷新插件   - Empty:网络错误和空数据UI插件


Network版块



  • KJBaseNetworking:网络请求基类,基于 AFNetworking 封装使用

  • 这里也提供两个入口,设置通用的根路径和通用参数,类似:userID,token等


/// 根路径地址
@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;



  • 目前抽离出以下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插件集合



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



Chain链式插件网络



Batch批量插件网络



关于作者


浏览 19
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报