BBAAPIRequestManagerProtocol.h 2.56 KB
//
//  BBAAPIRequestManagerProtocol.h
//  BBAAPIRequest
//
//  Created by chenjia09 on 2020/1/20.
//  Copyright © 2020 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/// 抽象APIRequestManagaer接口, 目前BBAAPIRequestManager和BBAHTTPManager遵循它来实现
@protocol BBAAPIRequestManagerProtocol <NSObject>

@required

#pragma mark - Flow Control

/// 入队一个请求
/// @param request APIRequest
- (void)enqueueAPIRequest:(BBABaseAPIRequest *)request;

/// 取消一个请求
/// @param apiRequest APIRequest
- (void)cancelAPIRequest:(BBABaseAPIRequest *)apiRequest;

/// 生成对应的NSURLRequest
/// @param apiRequest APIRequest
- (NSMutableURLRequest*)urlRequestForRequest:(BBABaseAPIRequest*)apiRequest;

/// 预处理一个请求
/// @param apiRequest APIRequest
- (void)preprocessRequest:(BBABaseAPIRequest *)apiRequest;

/// 生成对应的NSURLSessionTask
/// @param apiRequest APIRequest
/// @param error 错误
- (NSURLSessionTask *)dataTaskWithAPIRequest:(BBABaseAPIRequest*)apiRequest
                                        error:(NSError * __autoreleasing *)error;

/// 为Task设置一个唯一标识Key
/// @param task NSURLSessionTask
- (void)setTagForTask:(NSURLSessionTask*)task;

/// 将请求放入StorngToWeak的Map中缓存
/// @param apiRequest APIRequest
- (void)addRequestToList:(BBABaseAPIRequest *)apiRequest;

/// 将请求移出StrongToWeak的Map缓存;如果APIRequest已析构,则会自动移出
/// @param request APIRequest
- (void)removeRequestFromList:(BBABaseAPIRequest *)request;

/// 统计请求开始
/// @param apiRequest APIRequest
- (void)statisticsBusinessTotalAction:(BBABaseAPIRequest*) apiRequest;

#pragma mark - Metrics

/// 请求发送前收集统计信息
/// @param apiRequest APIRequest
- (void)collectMetricsDidRequestStart:(BBABaseAPIRequest *)apiRequest;

/// 请求完成后收集统计信息
/// @param apiRequest APIRequest
- (void)collectMetricsDidRequestEnd:(BBABaseAPIRequest *)apiRequest;

/// 收集NSURLSessionMetric
/// @param taskMetrics TaskMetrics
/// @param apiRequest APIRequest
- (void)collectURLSessionMetrics:(NSURLSessionTaskMetrics *)taskMetrics withRequest:(BBABaseAPIRequest *)apiRequest API_AVAILABLE(ios(10.0));

#pragma mark - Error

/// 解析错误
/// @param err 错误
/// @param apiRequest APIRequest
- (void)parseNetworkError:(NSError *)err withRequest:(BBABaseAPIRequest *)apiRequest;

#pragma mark - Cronet

/// 判断当前Session是否注入了Cronet
/// @param session NSURLSession
- (BOOL)isInjectedWithCronet:(NSURLSession *)session;

@end

NS_ASSUME_NONNULL_END