用途:为 KMP 或 Android 项目配置 Ktor HttpClient 时,规避常见配置陷阱。资料聚焦配置细节,不覆盖共享 HttpClient 基础、引擎选择与 ContentNegotiation 入门。
主要能力与要点:
- 插件安装顺序:HttpRequestRetry 必须安装在 HttpTimeout 之前,否则超时请求在重试插件看到前已被判定失败,超时永远不会重试。Auth 插件独立处理 401 刷新,不要让两者围绕同一状态码串联。
- 序列化标志:kotlinx.serialization 默认 encodeDefaults = false,会剥离等于默认值的属性(如 jsonrpc = "2.0"),导致服务端拒绝请求;客户端 API 应设置 encodeDefaults = true,并配合 ignoreUnknownKeys、coerceInputValues,整个客户端共享同一 Json 实例。
- expectSuccess:设为 true 时非 2xx 会抛 ClientRequestException/ServerResponseException,且抛出先于手动状态检查;项目内应统一选择 expectSuccess = true + try/catch,或 expectSuccess = false + 显式检查状态,不可混用。
- Bearer 刷新:在 refreshTokens 块内的请求构建器中调用 markAsRefreshTokenRequest(),避免刷新请求被 Auth 插件再次拦截而无限循环;BearerTokens 仅保留在插件边界。
- WebSocket 与 SSE:安装 kotlinx-serialization 转换器以复用同一 Json 配置;SSE 为服务端到客户端单向、内置重连,WebSocket 双向、需手动重连,仅消费场景优先 SSE。收集应放在 LaunchedEffect 或仓库协程中,以便取消时关闭连接。
- 错误映射与测试:在仓库层捕获 ClientRequestException、ServerResponseException、HttpRequestTimeoutException、IOException 并映射为 DataError,避免 catch (e: Exception) 吞掉 CancellationException;测试时注入 HttpClientEngine 换用 MockEngine,并复用生产 createHttpClient 工厂以保证插件配置一致。
限制:资料未提供具体版本、依赖坐标、完整安装命令、收费或平台支持信息,暂未提供。