开源分享:一个功能强大的iOS网络请求管理模块HFBaseHTTPRequest

625 阅读5分钟

HFBaseHTTPRequestManagerModule

仓库地址:gitee.com/hfqf1234/hf…

📖 项目概述

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 方法

方法说明参数
HTPOSTHT POST请求URLString, parameters, success, failure
LJCPOSTLJC POST请求URLString, parameters, success, failure
LJCSignPOST带签名POST请求URLString, parameters, success, failure
HTGETHT GET请求URLString, parameters, success, failure
LJCGETLJC GET请求URLString, parameters, success, failure

🔧 安装和配置

CocoaPods 安装

# Podfile
pod 'HFBaseHTTPRequestManagerModule'

手动安装

  1. 下载源码
  2. HFBaseHTTPRequestManagerModule 文件夹添加到项目中
  3. 添加依赖库:
    • 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加密
  • 支持多业务场景

🤝 贡献指南

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

📄 许可证

HFBaseHTTPRequestManagerModule 基于 MIT 许可证开源。详见 LICENSE 文件。

👨‍💻 作者

hfqf123 - hfqf123@126.com

📞 联系方式


注意: 使用前请确保已正确配置网络权限和HTTPS证书。