Kuikly Network
一套 Contract,连接 Android、iOS、Kuikly 与 HarmonyOS。类型安全、可组合、可观测,也允许宿主替换每一层。
应用级单例
启动时初始化一次,Repository、UseCase 或页面直接创建类型化 API。
声明式 Contract
HTTP 方法、参数、缓存与重试策略由 KSP 在编译期生成。
不可变操作符
转换、组合、重试、缓存、降级和 Flow 输出可以按场景自由拼接。
开放扩展
替换 Interceptor、Engine、Converter、Store、Adapter 或实时传输。
一眼看懂调用链¶
@NetworkService 接口
│ KSP 生成
▼
NetworkCall<T> ── 操作符/单次策略
│
▼
NetworkClient ── Interceptor 链 ── Cache / Auth / Retry / Metrics
│
▼
NetworkEngine ── Android OkHttp / iOS NSURLSession / Harmony Bridge / 测试替身
业务层只依赖稳定的 NetworkCall、NetworkResult 和 NetworkFailure。平台差异留在 Engine,横切能力留在
Interceptor,服务端统一外壳留在 Response Adapter,因此扩展某一层时不需要重写其他层。
最小示例¶
// Application / AppDelegate
NetworkClients.initialize(
defaultClient = createNetworkClient("https://api.example.com") {
commonHeaders { mapOf("X-App-Version" to appVersion) }
responseCache()
coalesceRequests()
},
)
@NetworkService
interface ArticleApi {
@GET("/v1/articles/{id}")
@Cache(maxAgeSeconds = 60, staleIfErrorSeconds = 3_600)
fun detail(@Path("id") id: String): NetworkCall<ArticleDto>
}
private val api = createArticleApi()
val state = api.detail(articleId)
.retryWhen(NetworkRetryPolicy(maxAttempts = 3)) { it.retryable }
.asFlow()
已覆盖的能力¶
| 领域 | 能力 |
|---|---|
| 请求 | 7 种 HTTP 方法、动态 URL、Query/Header、JSON、Form、Multipart、ByteArray、进度 |
| 结果 | NetworkCall、NetworkResult、NetworkState、结构化失败、统一业务外壳 |
| 缓存 | Cache First、Network First、Cache Only、SWR、过期兜底、标签失效 |
| 韧性 | 安全重试、重试预算、请求合并、并发背压、优先级、限流、熔断、离线快速失败 |
| 安全 | HTTPS 动态地址、同源重定向、证书 Pin、响应上限、Inspector 脱敏 |
| 工程 | Koin、Inspector、指标、SSE、WebSocket SPI、脚本化测试、BOM、ABI 检查 |