HFBaseHTTPRequestManagerModule
📖 项目概述
HFBaseHTTPRequestManagerModule 是一个功能强大的iOS网络请求管理模块,采用工厂模式和单例模式设计,支持多种业务场景的网络请求处理。该模块提供了完整的网络请求解决方案,包括请求管理、安全加密、错误处理等功能。
✨ 主要特性
- 🔧 多业务支持:支持HT、LJC等多种业务场景
- 🔐 安全加密:集成RSA、AES、MD5等多种加密算法
- 🏭 工厂模式:采用抽象工厂模式,易于扩展和维护
- 📱 环境配置:支持生产、测试、开发等多种环境
- 🔄 异步处理:支持coobjc异步处理
- 📤 文件上传:支持单文件和多文件上传
- 🛡️ 错误处理:完善的错误处理和重试机制
- 🎯 链式调用:提供流畅的链式API调用
🏗️ 架构设计
整体架构图
graph TB
A[客户端调用] --> B[HFHttpAbstractFactory]
B --> C[HFHttpFactory]
C --> D[HFBaseHTTPRequestManager]
D --> E[AFNetworking]
E --> F[网络请求]
G[HFSecurity] --> H[RSA加密]
G --> I[AES加密]
G --> J[MD5哈希]
K[HFURLSetting] --> L[环境配置]
K --> M[域名管理]
N[HFHttpResonseModule] --> O[响应处理]
P[HFHttpError] --> Q[错误处理]
C --> G
D --> K
D --> N
D --> P
核心组件架构
graph LR
A[HFBaseHTTPRequestManager<br/>核心管理器] --> B[HFHttpAbstractFactory<br/>抽象工厂]
B --> C[HFHttpFactory<br/>基础工厂]
C --> D[HFHttpHtFactory<br/>HT工厂]
C --> E[HFHttpLJCFactory<br/>LJC工厂]
C --> F[HFHttpLJCSignFactory<br/>签名工厂]
C --> G[HFHttpJustGetFactory<br/>GET工厂]
C --> H[HFHttpPushExtensionFactory<br/>推送工厂]
I[HFSecurity<br/>安全模块] --> J[RSA加密]
I --> K[AES加密]
I --> L[MD5哈希]
I --> M[Base64编码]
N[HFURLSetting<br/>配置模块] --> O[环境配置]
N --> P[域名管理]
N --> Q[路径配置]
A --> I
A --> N
📁 项目结构
HFBaseHTTPRequestManagerModule/
├── HFBaseHTTPRequestManager.h/m # 核心请求管理器
├── HFHttpAbstractFactory.h # 抽象工厂接口
├── HFHttpFactory.h/m # 基础工厂实现
├── HFHttpHtFactory.h/m # HT业务工厂
├── HFHttpLJCFactory.h/m # LJC业务工厂
├── HFHttpLJCSignFactory.h/m # 带签名工厂
├── HFHttpJustGetFactory.h/m # GET请求工厂
├── HFHttpPushExtensionFactory.h/m # 推送扩展工厂
├── HFURLSetting.h/m # URL配置管理
├── HFHttpResonseModule.h/m # 响应处理模块
├── HFHttpError.h/m # 错误处理模块
├── HFBaseHTTPRequestTool.h/m # 请求工具类
└── Security/ # 安全模块
├── HFSecurity.h/m # 安全工具类
└── HFParamsRSAEncryptUtil.h/m # RSA加密工具
🔧 核心组件详解
1. HFBaseHTTPRequestManager
核心请求管理器,采用单例模式
- 管理不同类型的请求序列化器
- 提供统一的请求接口
- 支持HT、LJC等多种业务场景
2. HFHttpAbstractFactory
抽象工厂接口,定义请求构建规范
- 链式调用API设计
- 支持域名、路径、参数配置
- 提供GET、POST、文件上传等方法
3. HFHttpFactory
基础工厂实现,提供通用请求逻辑
- 实现抽象工厂接口
- 处理请求成功/失败回调
- 支持RSA加密开关
- 集成coobjc异步处理
4. 具体工厂类
- HFHttpHtFactory: HT业务专用
- HFHttpLJCFactory: LJC业务专用
- HFHttpLJCSignFactory: 带签名验证
- HFHttpJustGetFactory: 纯GET请求
- HFHttpPushExtensionFactory: 推送扩展
5. HFSecurity
安全加密模块
- RSA加密/解密
- AES加密/解密
- MD5哈希计算
- Base64编码/解码
6. HFURLSetting
URL配置管理
- 多环境域名配置
- 业务模块路径管理
- 动态URL构建
🚀 使用指南
基础使用
// 1. 基础POST请求
[[HFHttpFactory factory]
.setDomain(DOMAIN_USER)
.setPath(@"/api/login")
.setRequest(@{@"username": @"test", @"password": @"123456"})
.setResponseBlock(^(id<HFHttpResponseModel> resp) {
// 处理成功响应
HFHttpResonseModule *response = (HFHttpResonseModule *)resp;
NSLog(@"响应数据: %@", response.result);
})
.setErrorBock(^(id<HFHttpFailModel> error) {
// 处理错误
NSLog(@"请求失败: %@", error);
})
.post];
// 2. 带RSA加密的请求
[[HFHttpFactory factory]
.setDomain(DOMAIN_USER)
.setPath(@"/api/sensitive")
.setRequest(@{@"data": @"sensitive_data"})
.setRsaSwitch(YES)
.setResponseBlock(^(id<HFHttpResponseModel> resp) {
// 处理响应
})
.post];
// 3. 文件上传
[[HFHttpFactory factory]
.setDomain(DOMAIN_FILE)
.setPath(@"/api/upload")
.setImageName(@"avatar")
.setImage(imageData)
.setMimeType(@"image/jpeg")
.setResponseBlock(^(id<HFHttpResponseModel> resp) {
// 处理上传成功
})
.singleUpload];
使用不同业务工厂
// HT业务请求
[[HFHttpHtFactory factory]
.setDomain(DOMAIN_HTBASE)
.setPath(@"/api/ht/data")
.setRequest(@{@"param": @"value"})
.setResponseBlock(^(id<HFHttpResponseModel> resp) {
// 处理HT业务响应
})
.post];
// LJC业务请求
[[HFHttpLJCFactory factory]
.setDomain(DOMAIN_FINANCE)
.setPath(@"/api/ljc/data")
.setRequest(@{@"param": @"value"})
.setResponseBlock(^(id<HFHttpResponseModel> resp) {
// 处理LJC业务响应
})
.post];
// 带签名的请求
[[HFHttpLJCSignFactory factory]
.setDomain(DOMAIN_Sign)
.setPath(@"/api/sign/data")
.setRequest(@{@"param": @"value"})
.setResponseBlock(^(id<HFHttpResponseModel> resp) {
// 处理带签名的响应
})
.post];
使用coobjc异步处理
// 异步请求处理
COPromise<COTuple *> *promise = [[HFHttpFactory factory]
.setDomain(DOMAIN_USER)
.setPath(@"/api/async")
.setRequest(@{@"param": @"value"})
.coPost];
promise.then(^(COTuple *result) {
// 处理异步成功结果
id response = result.first;
NSLog(@"异步响应: %@", response);
return nil;
}).catch(^(NSError *error) {
// 处理异步错误
NSLog(@"异步错误: %@", error);
return nil;
});
🔄 请求流程图
sequenceDiagram
participant Client as 客户端
participant Factory as 工厂类
participant Manager as 请求管理器
participant Security as 安全模块
participant Network as 网络层
participant Response as 响应处理
Client->>Factory: 创建请求实例
Factory->>Factory: 配置请求参数
Factory->>Security: 检查是否需要加密
alt 需要RSA加密
Security->>Security: RSA加密参数
end
Factory->>Manager: 发送请求
Manager->>Network: 执行网络请求
Network-->>Manager: 返回响应
Manager->>Response: 处理响应
alt 请求成功
Response->>Factory: 返回成功数据
Factory->>Client: 调用成功回调
else 请求失败
Response->>Factory: 返回错误信息
Factory->>Client: 调用失败回调
end
📋 API 参考
HFHttpAbstractFactory 接口
| 方法 | 说明 | 参数 |
|---|---|---|
setDomain | 设置请求域名 | NSString *domain |
setPath | 设置请求路径 | NSString *path |
setRequest | 设置请求参数 | NSDictionary *para |
setImageName | 设置图片名称 | NSString *imageName |
setImage | 设置图片数据 | NSData *image |
setMimeType | 设置MIME类型 | NSString *mimetype |
setResponseBlock | 设置成功回调 | HFHttpSucceedBlock |
setErrorBock | 设置失败回调 | HFHttpFailedBlock |
setRsaSwitch | 设置RSA加密开关 | BOOL |
post | 执行POST请求 | void |
get | 执行GET请求 | void |
singleUpload | 单文件上传 | void |
multiUpload | 多文件上传 | void |
coPost | 异步POST请求 | COPromise |
HFBaseHTTPRequestManager 方法
| 方法 | 说明 | 参数 |
|---|---|---|
HTPOST | HT POST请求 | URLString, parameters, success, failure |
LJCPOST | LJC POST请求 | URLString, parameters, success, failure |
LJCSignPOST | 带签名POST请求 | URLString, parameters, success, failure |
HTGET | HT GET请求 | URLString, parameters, success, failure |
LJCGET | LJC GET请求 | URLString, parameters, success, failure |
🔧 安装和配置
CocoaPods 安装
# Podfile
pod 'HFBaseHTTPRequestManagerModule'
手动安装
- 下载源码
- 将
HFBaseHTTPRequestManagerModule文件夹添加到项目中 - 添加依赖库:
- AFNetworking
- coobjc
环境配置
// 配置基础URL
[HFBaseHTTPRequestManager manager].baseURLDictionary = @{
DOMAIN_USER: @"https://api.example.com",
DOMAIN_FILE: @"https://file.example.com"
};
// 配置基础参数
[HFBaseHTTPRequestManager manager].baseParameters = @{
@"version": @"1.0.0",
@"platform": @"iOS"
};
// 开启签名功能
[HFBaseHTTPRequestManager manager].signEnabled = YES;
🛡️ 安全特性
RSA加密
- 支持公钥加密
- 支持私钥解密
- 自动密钥管理
AES加密
- AES-256加密算法
- 随机密钥生成
- 本地密钥存储
MD5哈希
- 数据完整性验证
- 密码哈希处理
- 文件校验
🔍 错误处理
错误类型
- 网络连接错误
- 服务器响应错误
- 数据解析错误
- 加密解密错误
错误处理示例
.setErrorBock(^(id<HFHttpFailModel> error) {
HFHttpError *httpError = (HFHttpError *)error;
switch (httpError.code) {
case NSURLErrorNotConnectedToInternet:
// 网络连接错误
break;
case NSURLErrorTimedOut:
// 请求超时
break;
default:
// 其他错误
break;
}
})
📝 更新日志
v1.0.0
- 初始版本发布
- 支持基础网络请求功能
- 集成RSA/AES加密
- 支持多业务场景
🤝 贡献指南
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
📄 许可证
HFBaseHTTPRequestManagerModule 基于 MIT 许可证开源。详见 LICENSE 文件。
👨💻 作者
hfqf123 - hfqf123@126.com
📞 联系方式
- 邮箱:hfqf123@126.com
- 项目地址:GitHub
注意: 使用前请确保已正确配置网络权限和HTTPS证书。