# YuMi iOS 项目 API 请求配置分析 ## 📋 目录 - [主机地址配置](#主机地址配置) - [网络基础配置](#网络基础配置) - [自定义HTTP Headers](#自定义http-headers) - [默认请求参数](#默认请求参数) - [安全签名机制](#安全签名机制) - [请求内容类型](#请求内容类型) - [SSL安全配置](#ssl安全配置) - [特殊功能](#特殊功能) - [应用信息配置](#应用信息配置) ## 🌐 主机地址配置 | 环境 | 地址 | 说明 | |------|------|------| | 生产环境 | `https://api.hfighting.com` | 正式服务器 | | 测试环境 | `http://beta.api.molistar.xyz` | 开发测试服务器 | | 图片服务 | `https://image.hfighting.com` | 静态资源服务器 | **环境切换机制:** - 通过 `kIsProductionEnvironment` 用户偏好设置控制 - DEBUG 模式下可动态切换环境 - 发布版本强制使用生产环境 ## 🔧 网络基础配置 ```objective-c // AFHTTPSessionManager 优化配置 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; configuration.HTTPShouldUsePipelining = YES; // 启用 HTTP/2 pipelining configuration.HTTPMaximumConnectionsPerHost = 15; // 提升并发连接数到15 // 超时设置 manager.requestSerializer.timeoutInterval = 60; // 默认超时60秒 manager.requestSerializer.HTTPShouldHandleCookies = YES; // 启用Cookie处理 ``` ## 📋 自定义HTTP Headers ### 认证相关 Headers | Header 名称 | 值来源 | 说明 | |-------------|--------|------| | `pub_uid` | `[AccountInfoStorage instance].getUid` | 用户唯一标识符 | | `pub_ticket` | `[AccountInfoStorage instance].getTicket` | 用户身份认证票据 | | `Accept-Language` | `[NSBundle uploadLanguageText]` | 用户语言偏好 | | `App-Version` | `PI_App_Version` | 应用版本号 (1.0.28.1) | ### 压缩相关 Headers | Header 名称 | 值 | 说明 | |-------------|-----|------| | `Accept-Encoding` | `"gzip, br"` | 支持 gzip 和 Brotli 压缩 | | `Content-Encoding` | `"gzip"` | POST 请求数据压缩 | | `Content-Type` | `"application/json; charset=UTF-8"` | 特殊接口使用 | ## 🎯 默认请求参数 每个 API 请求都会自动添加以下基础参数: ```objective-c NSDictionary *defaultBasciParame = @{ @"Accept-Language": [NSBundle uploadLanguageText], // 界面语言 @"os": @"iOS", // 操作系统类型 @"osVersion": [YYUtility systemVersion], // 系统版本号 @"netType": ([YYUtility networkStatus] == ReachableViaWiFi) ? @2 : @1, // 网络类型 @"ispType": @([YYUtility carrierIdentifier]), // 运营商类型 @"channel": [YYUtility getAppSource] ?: @"", // 应用分发渠道 @"model": [YYUtility modelType], // 设备型号 @"deviceId": [YYUtility deviceUniqueIdentification], // 设备唯一标识 @"appVersion": [YYUtility appVersion], // 应用版本 @"app": [YYUtility appName], // 应用名称 @"lang": [YYUtility getLanguage], // 语言代码 @"mcc": [YYUtility getMobileCountryCode] // 移动国家代码(条件性添加) }; ``` ### 参数说明 - **netType**: WiFi=2, 蜂窝网络=1 - **channel**: 默认 "appstore",支持 "TestFlight" - **mcc**: 移动国家代码,值为 "65535" 时不添加 ## 🔐 安全签名机制 ### 签名生成流程 1. **参数过滤**: 移除系统级参数 ```objective-c // 被移除的参数 @[@"Accept-Language", @"pub_uid", @"appVersion", @"appVersionCode", @"channel", @"deviceId", @"ispType", @"netType", @"os", @"osVersion", @"app", @"ticket", @"client", @"lang", @"mcc"] ``` 2. **参数排序**: 按字典 key 升序排序 3. **字符串拼接**: `"key0=value0&key1=value1&key2=value2"` 4. **添加密钥**: 拼接 `key=PARAMSSECRET` 5. **MD5加密**: 生成大写 MD5 签名 6. **添加签名**: 以 `pub_sign` 参数名添加到请求中 ## 📊 请求内容类型 支持的响应内容类型: ```objective-c @"application/json" // 主要 JSON 响应 @"text/json" // JSON 文本格式 @"text/javascript" // JavaScript 格式 @"text/html" // HTML 响应 @"text/plain" // 纯文本 @"image/jpeg" // JPEG 图片 @"image/png" // PNG 图片 ``` ## 🛡️ SSL安全配置 ```objective-c manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; manager.securityPolicy.allowInvalidCertificates = NO; // 不允许无效证书 manager.securityPolicy.validatesDomainName = YES; // 验证域名 ``` ## ⚡ 特殊功能 ### 1. 网络状态检测 - 自动检测网络连接状态 - 离线时立即返回失败回调 - 避免无效请求 ### 2. 动态超时设置 ```objective-c // 通过参数动态设置超时时间 @{@"NeedChangeTimeOut": @30} // 设置30秒超时 ``` ### 3. 数据压缩 - POST 请求自动进行 Gzip 压缩 - 减少网络传输数据量 - 提升请求效率 ### 4. 错误追踪 - 集成 Bugly 错误上报 - 5xx 错误自动上报 - 包含调用堆栈信息 ### 5. 参数解码 - `MSParamsDecode` 处理参数加密 - 自动生成安全签名 - 保护 API 请求安全 ## 📱 应用信息配置 | 配置项 | 值 | 说明 | |--------|-----|------| | 应用版本 | `1.0.28.1` | 内置版本号 | | 默认渠道 | `appstore` | App Store 渠道 | | 测试渠道 | `TestFlight` | TestFlight 测试 | | 图片域名 | `https://image.hfighting.com` | 静态资源服务 | ## 🏗️ 架构特点 1. **统一管理**: `HttpRequestHelper` 类统一管理所有网络请求 2. **模块化**: API 接口按功能模块分类 (`Api+Mine`, `Api+DressUp` 等) 3. **安全性**: 多层安全机制保护 API 调用 4. **性能优化**: HTTP/2 支持、连接复用、数据压缩 5. **错误处理**: 完善的错误处理和上报机制 6. **环境切换**: 支持开发和生产环境无缝切换 ## 📝 总结 YuMi iOS 项目的 API 架构设计了完整的网络请求体系,包含: - 🔐 **安全机制**: 用户认证、参数签名、SSL验证 - 📊 **设备信息**: 完整的设备和应用信息收集 - ⚡ **性能优化**: HTTP/2、连接池、数据压缩 - 🛠️ **开发支持**: 环境切换、错误追踪、调试日志 - 🏗️ **架构清晰**: 模块化设计、统一管理、易于维护 这种设计确保了 API 请求的安全性、稳定性和高性能,为应用提供了可靠的网络服务基础。