shared API 是客户端和服务端之间的稳定层。UI 不直接拼接服务器路由,而是通过业务 API 和 backend 接口获取数据。
- DTO 放在
shared/src/commonMain/kotlin/cn/edu/ubaa/model,使用 kotlinx.serialization。 - 每个业务模块在
api/feature中定义 backend 接口,relay backend 使用ApiClientProvider.shared访问 server。 - 本地连接模式在
api/local中实现同一 backend 接口。 - 错误响应通过
ApiErrorResponse和错误码映射到用户可读文案。 - 新增业务能力时优先先扩展 shared 接口,再分别实现 relay、本地和服务端路由。
- 认证与用户:
AuthApi.kt、AnnouncementService.kt、UpdateService.kt。 - 课程与学习:
ScheduleApi.kt、GradeApi.kt、SpocApi.kt、JudgeApi.kt。 - 校园服务:
BykcApi.kt、ClassroomApi.kt、SigninApi.kt、CgyyApi.kt、YgdkApi.kt、EvaluationService.kt。 - 存储:Token、凭据、公告已读、博雅筛选、研讨室表单。
服务端返回字段要兼容已发布客户端。尤其是版本检查、错误响应、成绩和作业 DTO,服务端能兼容时优先在服务端做向后兼容。
shared/src/commonMain/kotlin/cn/edu/ubaa/api/core/ApiClient.ktshared/src/commonMain/kotlin/cn/edu/ubaa/api/core/ApiFactory.ktshared/src/commonMain/kotlin/cn/edu/ubaa/api/auth/NetworkUtils.ktshared/src/commonMain/kotlin/cn/edu/ubaa/api/auth/UpdateService.ktshared/src/commonMain/kotlin/cn/edu/ubaa/api/feature/GradeApi.ktshared/src/commonMain/kotlin/cn/edu/ubaa/api/feature/JudgeApi.ktshared/src/commonMain/kotlin/cn/edu/ubaa/model/dto/Auth.ktshared/src/commonMain/kotlin/cn/edu/ubaa/model/dto/Judge.ktshared/src/commonTest/kotlin/cn/edu/ubaa/api/ApiFactoryDispatchTest.kt