85 lines
2.5 KiB
Swift
85 lines
2.5 KiB
Swift
import Foundation
|
||
|
||
// MARK: - API Endpoints
|
||
|
||
/// API 端点枚举
|
||
///
|
||
/// 定义了应用中所有可用的 API 端点路径。
|
||
/// 使用枚举确保端点路径的类型安全和统一管理。
|
||
///
|
||
/// 添加新端点时,只需在此枚举中添加新的 case 即可。
|
||
///
|
||
/// 使用示例:
|
||
/// ```swift
|
||
/// let configPath = APIEndpoint.config.path // "/client/config"
|
||
/// ```
|
||
enum APIEndpoint: String, CaseIterable {
|
||
case config = "/client/config"
|
||
case configInit = "/client/init"
|
||
case login = "/auth/login"
|
||
// 可以继续添加其他端点
|
||
|
||
var path: String {
|
||
return self.rawValue
|
||
}
|
||
}
|
||
|
||
// MARK: - API Configuration
|
||
|
||
/// API 配置结构体
|
||
///
|
||
/// 集中管理 API 相关的配置参数,包括:
|
||
/// - 服务器地址配置
|
||
/// - 请求超时设置
|
||
/// - 数据大小限制
|
||
/// - 默认请求头设置
|
||
///
|
||
/// 配置特点:
|
||
/// - 支持不同环境的服务器地址
|
||
/// - 防止资源超限的保护机制
|
||
/// - 自动添加认证和设备信息头部
|
||
struct APIConfiguration {
|
||
static let baseURL = "http://beta.api.molistar.xyz"
|
||
static let timeout: TimeInterval = 30.0
|
||
static let maxDataSize: Int = 50 * 1024 * 1024 // 50MB 限制,防止资源超限
|
||
|
||
/// 默认请求头配置
|
||
///
|
||
/// 返回所有 API 请求都需要的基础请求头,包括:
|
||
/// - Content-Type 和 Accept 头部
|
||
/// - 压缩支持配置
|
||
/// - 语言和版本信息
|
||
/// - 用户认证信息(如果已登录)
|
||
///
|
||
/// 这些头部会自动添加到每个请求中,确保服务器能够正确处理请求
|
||
static var defaultHeaders: [String: String] {
|
||
var headers = [
|
||
"Content-Type": "application/json",
|
||
"Accept": "application/json",
|
||
"Accept-Encoding": "gzip, br",
|
||
"Accept-Language": Locale.current.languageCode ?? "en",
|
||
"App-Version": Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "1.0.0"
|
||
]
|
||
|
||
// 添加用户认证相关 headers(如果存在)
|
||
if let userId = UserInfoManager.getCurrentUserId() {
|
||
headers["pub_uid"] = userId
|
||
}
|
||
|
||
if let userTicket = UserInfoManager.getCurrentUserTicket() {
|
||
headers["pub_ticket"] = userTicket
|
||
}
|
||
|
||
return headers
|
||
}
|
||
}
|
||
|
||
// MARK: - Request Models
|
||
struct LoginRequest: Codable {
|
||
let username: String
|
||
let password: String
|
||
}
|
||
|
||
// MARK: - Empty Request
|
||
struct EmptyRequest: Codable {}
|