Docs: Add API field type documentation

This commit is contained in:
2026-07-03 13:46:34 +08:00
parent b9fc411999
commit d0b07f42de
@@ -0,0 +1,74 @@
# UUVPN API 字段类型说明
## 问题背景
在对接 Xboard 后端 API 时,发现部分字段在不同接口返回的类型不一致,需要在客户端代码中做兼容处理。
---
## 字段类型不一致问题
### `sell` 字段
| 接口 | 返回类型 | 示例值 |
|------|---------|--------|
| `/api/v1/user/getSubscribe` | `Int` | `"sell": 1` |
| `/api/v1/user/plan/fetch` | `Boolean` | `"sell": true` |
**解决方案:**
`PlanData` 数据类中:
- 字段类型定义为 `Any?`
- 添加辅助属性 `isSell` 进行类型转换
```kotlin
@SerializedName("sell") val sell : Any?
// 辅助属性:将 sell 转换为布尔值(兼容整数和布尔类型)
val isSell: Boolean
get() = when (sell) {
is Boolean -> sell as Boolean
is Number -> (sell as Number).toInt() != 0
null -> false
else -> false
}
```
---
## 其他注意事项
### `PlanData` 字段
为确保 JSON 解析稳定性,以下字段定义为可空类型:
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | `Int?` | 套餐ID |
| `name` | `String?` | 套餐名称 |
| `show` | `Boolean?` | 是否显示 |
| `renew` | `Boolean?` | 是否可续费 |
| `sell` | `Any?` | 是否可购买(类型不一致) |
### `SubscribeData` 字段
| 字段 | 类型 | 说明 |
|------|------|------|
| `device_limit` | `Int?` | 设备限制数 |
| `speed_limit` | `Int?` | 速度限制 |
| `next_reset_at` | `Long?` | 下次重置时间 |
---
## 相关文件
- [ApiService.kt](Android-kotlin-Code/design/src/main/java/com/github/kr328/clash/design/network/ApiService.kt) - API 接口和数据类定义
- [ApiClient.kt](Android-kotlin-Code/design/src/main/java/com/github/kr328/clash/design/network/ApiClient.kt) - Retrofit 客户端配置
---
## 更新日志
- 2026-07-03: 发现并修复 `sell` 字段类型不一致问题
- 2026-07-03: 添加 `SubscribeData` 缺失字段
- 2026-07-03: 修复 Retrofit baseUrl 必须以 `/` 结尾的问题