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款插件供使用:

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的小夥伴還是使用Moya吧,是真的香。
  • 再附上一個開發加速庫,簡簡單單的如此便利 .🎷
  • KJCategoriesDemo地址 🎷 喜歡的老闆們可以點個小星星.
  • 等我有時間空閒再來封裝一套響應式插件網絡請求吧,所以老闆們覺得有幫助還望點個星🌟。
  • 傳送門:KJNetworkPluginDemo
  • End .🎷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章