6.4 KiB
6.4 KiB
YuMi iOS 项目 API 请求配置分析
📋 目录
🌐 主机地址配置
环境 | 地址 | 说明 |
---|---|---|
生产环境 | https://api.hfighting.com |
正式服务器 |
测试环境 | http://beta.api.molistar.xyz |
开发测试服务器 |
图片服务 | https://image.hfighting.com |
静态资源服务器 |
环境切换机制:
- 通过
kIsProductionEnvironment
用户偏好设置控制 - DEBUG 模式下可动态切换环境
- 发布版本强制使用生产环境
🔧 网络基础配置
// 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 请求都会自动添加以下基础参数:
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" 时不添加
🔐 安全签名机制
签名生成流程
-
参数过滤: 移除系统级参数
// 被移除的参数 @[@"Accept-Language", @"pub_uid", @"appVersion", @"appVersionCode", @"channel", @"deviceId", @"ispType", @"netType", @"os", @"osVersion", @"app", @"ticket", @"client", @"lang", @"mcc"]
-
参数排序: 按字典 key 升序排序
-
字符串拼接:
"key0=value0&key1=value1&key2=value2"
-
添加密钥: 拼接
key=PARAMSSECRET
-
MD5加密: 生成大写 MD5 签名
-
添加签名: 以
pub_sign
参数名添加到请求中
📊 请求内容类型
支持的响应内容类型:
@"application/json" // 主要 JSON 响应
@"text/json" // JSON 文本格式
@"text/javascript" // JavaScript 格式
@"text/html" // HTML 响应
@"text/plain" // 纯文本
@"image/jpeg" // JPEG 图片
@"image/png" // PNG 图片
🛡️ SSL安全配置
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
manager.securityPolicy.allowInvalidCertificates = NO; // 不允许无效证书
manager.securityPolicy.validatesDomainName = YES; // 验证域名
⚡ 特殊功能
1. 网络状态检测
- 自动检测网络连接状态
- 离线时立即返回失败回调
- 避免无效请求
2. 动态超时设置
// 通过参数动态设置超时时间
@{@"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 |
静态资源服务 |
🏗️ 架构特点
- 统一管理:
HttpRequestHelper
类统一管理所有网络请求 - 模块化: API 接口按功能模块分类 (
Api+Mine
,Api+DressUp
等) - 安全性: 多层安全机制保护 API 调用
- 性能优化: HTTP/2 支持、连接复用、数据压缩
- 错误处理: 完善的错误处理和上报机制
- 环境切换: 支持开发和生产环境无缝切换
📝 总结
YuMi iOS 项目的 API 架构设计了完整的网络请求体系,包含:
- 🔐 安全机制: 用户认证、参数签名、SSL验证
- 📊 设备信息: 完整的设备和应用信息收集
- ⚡ 性能优化: HTTP/2、连接池、数据压缩
- 🛠️ 开发支持: 环境切换、错误追踪、调试日志
- 🏗️ 架构清晰: 模块化设计、统一管理、易于维护
这种设计确保了 API 请求的安全性、稳定性和高性能,为应用提供了可靠的网络服务基础。