移动/游戏
在 Android/Kotlin 项目需要类型安全…
适用于基于 Retrofit 的 Android 网络层开发,涵盖服务接口、请求体、Header、响应、Hilt 和 Repository 错误处理。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 Android/Kotlin 项目需特定
解决思路
- 使用 `{name}` 在相对 URL 中定义动态路径,并在参数中使用 `@Path("name")`。
- 使用 `@Query("key")` 传递单个查询参数。
- 使用 `@QueryMap Map<String, String>` 传递动态查询参数集合。
- 使用 `@Body` 将对象按配置的转换器(JSON)序列化为请求体。
- 使用 `@FormUrlEncoded` 和 `@Field` 发送 `application/x-www-form-urlencoded` 表单数据。
- 使用 `@Multipart` 和 `@Part` 发送 `multipart/form-data` 数据。
- 使用 `@Headers` 为方法设置静态请求头。
- 使用 `@Header` 通过参数设置动态请求头。
- 使用 `@HeaderMap` 设置动态请求头映射。
- 使用 OkHttp `Interceptor` 设置全局请求头。
- 对于 `suspend` 函数,可直接返回反序列化后的 Body(如 `User`);非 2xx 响应会抛出 `HttpException`。
- 对于 `suspend` 函数,可返回 `Response<User>` 以访问状态码、响应头和错误体,且非 2xx 不抛出异常。
- 在 Hilt 模块中提供 Retrofit 实例作为单例:使用 `@Module`、`@InstallIn(SingletonComponent::class)` 和 `@Provides @Singleton`。
- 在 Hilt 模块中提供 `Json` 配置:设置 `ignoreUnknownKeys = true` 和 `coerceInputValues = true`。
- 在 Hilt 模块中提供 `OkHttpClient`:添加 `HttpLoggingInterceptor`(debug 用,`Level.BODY`)并设置连接超时,如 `connectTimeout(30, TimeUnit.SECONDS)`。
- 在 Hilt 模块中提供 `Retrofit`:设置 `baseUrl`、传入 `OkHttpClient`,并通过 `json.asConverterFactory("application/json".toMediaType())` 添加转换器工厂。
- 在 Repository 层使用 `runCatching` 捕获网络异常,使 UI 状态保持干净。
- 在 Repository 层处理特定异常,如 `UnknownHostException`、`SocketTimeoutException`。
- Checklist:对所有网络调用使用 `suspend` 函数。
- Checklist:如果需要处理特定状态码(如 401 Unauthorized),优先使用 `Response<T>`。
- Checklist:使用 `@Path` 和 `@Query` 而不是手动拼接 URL。
- Checklist:为 `OkHttpClient` 配置日志(debug)和合理的超时。
- Checklist:将 API DTO 映射到 Domain 模型以解耦各层。
适用边界 · 注意事项
- 不适用于非 Android 或非 Kotlin 项目。
- 不适用于项目已使用其他网络库(如 Ktor)且不希望引入 Retrofit/OkHttp/Hilt 的情况。
- 不适用于不需要类型安全网络层或只需极简单次 HTTP 请求的场景。