All Projects → yangKJ → KJNetworkPlugin

yangKJ / KJNetworkPlugin

Licence: other
🎡A lightweight but powerful Network library. Network Plugin, Support batch and chain operation. 插件版网络架构

Programming Languages

objective c
16641 projects - #2 most used programming language
swift
15916 projects
ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to KJNetworkPlugin

Arrowdrawable
纯Paint实现的一个射箭效果,可用作Loading动画。
Stars: ✭ 103 (+139.53%)
Mutual labels:  loading, refresh
Rximagepicker
Android图片相册预览选择器、支持AndroidX,支持图片的单选、多选、图片预览、图片文件夹切换、在选择图片时调用相机拍照
Stars: ✭ 85 (+97.67%)
Mutual labels:  cache, loading
Hgplaceholders
Nice library to show placeholders and Empty States for any UITableView/UICollectionView in your project
Stars: ✭ 2,048 (+4662.79%)
Mutual labels:  loading, empty
PageStatusTransformer
A low invasive state management on Android
Stars: ✭ 12 (-72.09%)
Mutual labels:  loading, empty
Zbnetworking
AFNetworking4.X封装 GET/POST /PUT/PATCH /DELETE / Upload /DownLoad 网络请求 添加了请求缓存,断点下载,显示缓存大小,删除缓存,取消当前请求等功能
Stars: ✭ 186 (+332.56%)
Mutual labels:  cache, afnetworking
react-native-simplest-hud
The simplest network load indicator of react-native
Stars: ✭ 22 (-48.84%)
Mutual labels:  loading, mbprogresshud
Gocache
☔️ A complete Go cache library that brings you multiple ways of managing your caches
Stars: ✭ 775 (+1702.33%)
Mutual labels:  cache, chain
Statefulviewcontroller
Placeholder views based on content, loading, error or empty states
Stars: ✭ 2,139 (+4874.42%)
Mutual labels:  loading, empty
Dataloader Php
DataLoaderPhp is a generic utility to be used as part of your application's data fetching layer to provide a simplified and consistent API over various remote data sources such as databases or web services via batching and caching.
Stars: ✭ 160 (+272.09%)
Mutual labels:  cache, batch
Cachego
Golang Cache component - Multiple drivers
Stars: ✭ 148 (+244.19%)
Mutual labels:  cache, chain
Ppnetworkhelper
AFNetworking 3.x 与YYCache封装
Stars: ✭ 1,586 (+3588.37%)
Mutual labels:  cache, afnetworking
Godot Gametemplate
Template with all necessary stuff taken care, just create your games main features.
Stars: ✭ 435 (+911.63%)
Mutual labels:  manager, loading
Sjnetwork
SJNetwork is a high level network request tool based on AFNetworking and inspired on YTKNetwork.
Stars: ✭ 231 (+437.21%)
Mutual labels:  cache, afnetworking
LXFProtocolTool
由Swift中协议方式实现功能的实用工具库【Refreshable、EmptyDataSetable 支持 Rx 】
Stars: ✭ 101 (+134.88%)
Mutual labels:  refresh, empty
public
util toolkit for go.golang 通用函数包
Stars: ✭ 135 (+213.95%)
Mutual labels:  cache
lrkFM
Awesome, (ad) free, open source file manager for Android
Stars: ✭ 44 (+2.33%)
Mutual labels:  manager
Batched-Grabber
🖥️ Windows Batch and powershell Discord Token grabber. Made for Troll (lmao)
Stars: ✭ 39 (-9.3%)
Mutual labels:  batch
Osiris-pwm
A simple and lightweight encrypted password manager written in Go.
Stars: ✭ 32 (-25.58%)
Mutual labels:  manager
Bat2Exe
Windows user interface for converting your batch files into executables.
Stars: ✭ 60 (+39.53%)
Mutual labels:  batch
events-manager-io
A basic site for managing event centers and scheduling events.
Stars: ✭ 19 (-55.81%)
Mutual labels:  manager

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

  • 熟悉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 response 响应数据
/// @param endRequest 是否结束下面的网络请求
/// @return 返回缓存数据,successResponse 不为空表示存在缓存数据
- (KJNetworkingResponse *)prepareWithRequest:(KJNetworkingRequest *)request
                                    response:(KJNetworkingResponse *)response
                                  endRequest:(BOOL *)endRequest;

/// 网络请求开始时刻请求
/// @param request 请求相关数据
/// @param response 响应数据
/// @param stopRequest 是否停止网络请求
/// @return 返回网络请求开始时刻插件处理后的数据
- (KJNetworkingResponse *)willSendWithRequest:(KJNetworkingRequest *)request
                                     response:(KJNetworkingResponse *)response
                                  stopRequest:(BOOL *)stopRequest;

/// 成功接收数据
/// @param request  接收成功数据
/// @param response 响应数据
/// @param againRequest 是否需要再次请求该网络
/// @return 返回成功插件处理后的数据
- (KJNetworkingResponse *)succeedWithRequest:(KJNetworkingRequest *)request
                                    response:(KJNetworkingResponse *)response
                                againRequest:(BOOL *)againRequest;

/// 失败处理
/// @param request  失败的网络活动
/// @param response 响应数据
/// @param againRequest 是否需要再次请求该网络
/// @return 返回失败插件处理后的数据
- (KJNetworkingResponse *)failureWithRequest:(KJNetworkingRequest *)request
                                    response:(KJNetworkingResponse *)response
                                againRequest:(BOOL *)againRequest;

/// 准备返回给业务逻辑时刻调用
/// @param request 请求相关数据
/// @param response 响应数据
/// @param error 错误信息
/// @return 返回最终加工之后的数据
- (KJNetworkingResponse *)processSuccessResponseWithRequest:(KJNetworkingRequest *)request
                                                   response:(KJNetworkingResponse *)response
                                                      error:(NSError **)error;

Plugins

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


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

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

关于作者

救救孩子吧,谢谢各位老板~~~~


Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].