aslan-flutter/md/后端接口对接规范.md
2026-07-10 20:31:52 +08:00

321 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 后端接口对接规范
## 1. 目标
本文档用于 Aslan Flutter 项目后续与后端接口对接时统一协作边界、接口事实来源、前端落地位置、记录格式和问题流转方式。
核心原则:
- 前端可以只读查看后端代码、接口文档和契约,用于理解接口、字段、错误码、鉴权和业务边界。
- 前端绝对不能修改后端仓库中的任何代码、文档、配置、生成文件、SQL、资源或测试。
- 如果发现后端接口、字段、错误码或业务逻辑需要调整,只能整理建议和证据,由用户协调后端处理。
- 对接接口时禁止本地假数据兜底;接口报错、空数据、权限失败、字段缺失都必须按真实状态处理,不能用本地 mock 数据伪装成接口成功。
---
## 2. 当前前端项目事实
当前 Flutter 项目路径:
```text
/Users/pinpaibu/flutter_code/aslan-flutter
```
项目名与包:
- 应用名:`Aslan`
- Flutter package import 前缀:`package:aslan/...`
- 当前配置入口:`lib/chatvibe_core/config/app_config.dart`
- 当前默认配置:`Variant1Config`
- 当前 API Host`https://api.atuchat.com/`
- 当前图片 Host`https://img.atuchat.com/`
主要前端分层:
- `lib/chatvibe_core/`:配置、常量、路由、通用工具。
- `lib/chatvibe_data/`:数据层实现、本地存储、网络请求、仓库实现。
- `lib/chatvibe_domain/`:仓库接口、请求模型、响应模型和领域模型。
- `lib/chatvibe_features/`:按业务功能组织的页面、状态和交互逻辑。
- `lib/chatvibe_managers/`:跨页面复用的管理器。
- `lib/chatvibe_ui/`:公共 UI 组件、主题和通用 widgets。
- `local_packages/`:项目内维护的本地 Flutter 插件,不能随意替换为 pub.dev 原版。
---
## 3. 后端代码位置
服务端代码项目名称:`likei-services`
当前本机后端仓库路径:
```text
/Users/pinpaibu/server_code/likei-services
```
已确认的后端结构:
- `rc-gateway/`:服务网关,客户端接口对接优先看这里。
- `rc-auth/`:认证服务。
- `rc-service/rc-service-wallet/`:钱包服务。
- `rc-service/rc-service-live/`:直播 / 语音房相关服务。
- `rc-service/rc-service-order/`:订单服务。
- `rc-service/rc-service-other/`:其他业务服务。
- `rc-service/rc-service-external/`:外部能力对接服务。
- `rc-service/rc-service-console/`:后台运营服务。
- `rc-service/rc-inner-api/`:内部服务 API / DTO 契约。
- `rc-common-business/`通用业务组件、DTO、MQ、核心能力。
- `rc-register/`:注册配置中心。
- `rc-scheduling/`:调度中心。
- `rc-service-game/`:游戏服务。
- `claude/``reports/`:后端辅助资料或报告,按需只读参考。
```text
后端仓库类型Java / Maven 多模块服务
```
说明:
- 后端代码仅用于接口 API 参考。
- 不要修改服务端任何代码。
- 如果服务端需要增加接口或者存在 bug只能提出建议和证据。
---
## 4. 后端代码只读红线
后续任何前端线程、AI 或开发者,进入后端路径时必须遵守:
- 只允许查看、搜索、摘录和分析后端代码。
- 禁止创建、修改、删除、移动、格式化后端仓库中的任何文件。
- 禁止对后端仓库使用 `apply_patch`、编辑器保存、`sed -i`、重定向写文件、脚本生成、批量替换等写入方式。
- 禁止运行会改动后端仓库文件的命令例如格式化、依赖整理、代码生成、数据库迁移生成、OpenAPI 生成、mock 生成。
- 默认不在后端仓库执行构建、测试、启动、Docker、Makefile 或脚本命令;如果确实需要运行,必须先说明目的、可能产生的文件影响,并得到用户明确允许。
- 禁止提交、暂存、切分支、rebase、merge、pull、push 后端仓库。
- 禁止把前端对接需要的临时标记写入后端代码注释或文档。
允许的只读命令示例:
```text
ls
find
rg
sed -n
git status --short
git diff --stat
git show
git grep
```
如果命令可能产生缓存、日志、生成文件或配置变更,默认视为禁止。
---
## 5. 接口事实参考顺序
对接某个接口前,必须按以下顺序确认事实:
1. 先看后端接口文档或 OpenAPI确认 HTTP path、method、请求体、响应体、鉴权要求和错误码描述。
2. 再看后端实际路由注册和 handler/controller确认当前线上实现、参数解析、响应 envelope 和鉴权行为。
3. 如接口由内部服务 API、DTO、Feign/RPC 或其它内部契约支撑,再看对应契约,确认字段语义、枚举、默认值和跨服务约束。
4. 必要时查看后端 service/domain/storage 代码,只为理解业务规则和字段来源,不直接照搬内部实现到前端。
5. 最后再查看业务说明文档,用于确认流程边界、当前限制和后续计划。
当接口文档、handler、契约、业务文档之间不一致时
- 以当前后端 handler/controller 实现作为“现状事实”记录。
- 同时把不一致点写入“待后端确认事项”。
- 前端不得自行修改后端文档或代码来消除不一致。
---
## 6. 当前 Flutter 网络层约定
网络入口:
- 全局请求实例:`lib/chatvibe_data/sources/remote/net/network_client.dart` 中的 `http`
- 通用请求基类:`lib/chatvibe_data/sources/remote/net/api.dart` 中的 `BaseNetworkClient`
- Dio 基础配置:`connectTimeout = 12s``receiveTimeout = 15s`
- 额外超时拦截:`TimeOutInterceptor.globalTimeoutSeconds = 15`
基础 URL
- `NetworkClient.init()` 设置 `dio.options.baseUrl = ATGlobalConfig.apiHost`
- `ApiInterceptor.onRequest()` 每次请求会重新写入 `options.baseUrl = ATGlobalConfig.apiHost`
- `ATGlobalConfig.apiHost` 来自 `AppConfig.current.apiHost`
请求头:
- `req-lang`:当前语言。
- `req-imei`:设备 ID。
- `req-app-intel`版本、build、机型、系统版本、渠道。
- `req-client``Android``iOS`
- `req-sys-origin``origin``originChild`
- `Authorization`:当本地 token 非空时发送 `Bearer <token>`
- `Req-Atyou`:当前固定为 `true`
响应 envelope
```text
{
"status": bool,
"errorCode": int?,
"errorCodeName": string?,
"errorMsg": string?,
"body": any,
"time": number?
}
```
响应处理规则:
- `status == true` 才视为业务成功。
- `body` 由调用方传入的 `fromJson` 解析为领域响应模型。
- `status == false` 会通过 DioException 进入错误流程。
- 业务错误码集中参考 `lib/chatvibe_data/models/enum/at_erro_code.dart`
- 不能在 UI 层直接解析后端 envelope应在网络层、仓库层或 manager/provider 中处理。
特别注意:
- 当前仓库实现中,许多实际请求 path 是加密或映射后的字符串,真实业务接口名通常写在方法注释里,例如 `///auth/account/login`
- 后续记录接口时,必须同时记录“业务接口名”和“当前实际请求 path”。
- 如果需要新增接口,不要猜测加密 path 或随意复用旧 path必须先确认后端契约和当前前端映射方式。
---
## 7. 前端对接落地流程
每次对接新接口时,按以下步骤执行:
1. 确认当前线程负责的业务板块,不能越界顺手处理其它模块。
2. 只读查看后端接口文档、实际 handler/controller、契约和相关业务说明。
3. 在前端记录接口事实:业务接口名、当前实际请求 path、method、auth、request、response、错误码、后端证据文件。
4. 按当前项目分层落地:
- `lib/chatvibe_data/sources/remote/net/`:只维护通用网络能力、拦截器和响应 envelope。
- `lib/chatvibe_domain/models/req/`:新增或调整请求模型。
- `lib/chatvibe_domain/models/res/`:新增或调整响应模型。
- `lib/chatvibe_domain/repositories/`:声明业务仓库接口方法。
- `lib/chatvibe_data/sources/repositories/`:实现仓库接口并调用 `http.get/post/put/delete`
- `lib/chatvibe_managers/``lib/chatvibe_features/<feature>/`:编排页面流程、加载态、错误态和状态更新。
- `lib/chatvibe_ui/`:只做通用 UI 组件,不放接口解析逻辑。
5. 接口错误、空数据、鉴权失败、字段缺失必须展示真实状态或走既有错误流程,禁止本地假数据兜底。
6. 如发现后端需要调整,写入“待后端确认事项”,明确“建议后端处理”,前端不改后端。
---
## 8. 本地假数据与兜底红线
对接真实接口时禁止:
- 接口报错后返回本地固定列表、固定对象或 mock JSON让页面看起来正常。
- 字段缺失时在仓库层硬编码业务假值来绕过问题。
- 后端未返回权限、余额、身份、房间状态等关键字段时,前端自行推断并继续提交后续业务请求。
- 将调试用 mock、临时测试数据、接口样例数据留在正式逻辑中。
- 为了避免页面空态,把接口失败当作空列表成功。
允许:
- UI 展示空态、错误态、重试按钮、toast 或既有错误弹窗。
- 在开发调试环境中使用明确隔离的 mock但不得进入正式接口对接逻辑。
- 对非关键展示字段使用产品确认过的展示默认值,例如空昵称展示 `--`;这不等同于业务数据兜底。
---
## 9. 接口事实记录模板
后续每个正式接入的接口,建议按以下格式记录在对应业务文档或本文件的接口记录区:
```text
### 接口名称
- 业务板块:
- 后端来源:
- 接口文档 / OpenAPI
- Handler / Controller
- Proto / RPC / Service
- 业务接口名:
- 当前实际请求 path
- Method
- Auth
- Request
- Response body
- 业务错误码:
- 前端落地位置:
- repository interface
- repository impl
- request model
- response model
- manager / provider / feature logic
- page / widget
- 是否存在本地假数据兜底:否
- 待后端确认:
- 当前状态:未接入 / 接入中 / 已接入 / 等后端确认
```
---
## 10. 后端问题建议流转
如果前端对接时发现以下情况,不修改后端,只记录建议:
- 接口文档与实际 handler/controller 实现不一致。
- 字段缺失、字段含义不清、枚举值不完整。
- 错误码无法支撑前端区分提示。
- 接口返回结构不适合前端稳定渲染。
- 鉴权、幂等、分页、排序、时间单位、空态规则不明确。
- 后端当前只支持 mock 或占位实现。
- 前端需要新增接口、合并接口或调整响应字段。
- 当前前端需要真实接口,但后端尚未提供可用契约。
建议记录格式:
```text
- 【待后端确认业务板块YYYY-MM-DD HH:mm CST】
问题:
证据:
前端影响:
建议后端处理:
```
所有建议由用户协调后端团队处理;前端线程只负责说明影响、提供证据和调整前端对接方案。
---
## 11. 验证要求
接口对接完成后,至少给出以下验证:
- 静态检查:按改动范围运行 `flutter analyze` 或说明无法运行的原因。
- 模型解析:确认成功响应、空 body、字段缺失、错误响应不会导致非预期崩溃。
- 业务路径:验证页面正常加载、刷新、分页、提交、失败提示等主路径。
- 鉴权路径验证未登录、token 失效或权限不足时走既有登录/错误流程。
- 回归范围:说明本次改动是否影响同仓库其它方法、共享模型、网络拦截器或全局错误处理。
如果是 bug 修复线程,还必须先说明 Root Cause得到用户确认后再改代码并坚持最小改动。
---
## 12. 当前可优先参考的前端文件
对接接口时,前端优先查看:
- `lib/chatvibe_data/sources/remote/net/network_client.dart`
- `lib/chatvibe_data/sources/remote/net/api.dart`
- `lib/chatvibe_data/sources/remote/net/at_logger.dart`
- `lib/chatvibe_data/models/enum/at_erro_code.dart`
- `lib/chatvibe_core/constants/at_global_config.dart`
- `lib/chatvibe_core/config/app_config.dart`
- `lib/chatvibe_core/config/configs/variant1_config.dart`
- `lib/chatvibe_domain/repositories/`
- `lib/chatvibe_data/sources/repositories/`
- `lib/chatvibe_domain/models/req/`
- `lib/chatvibe_domain/models/res/`
后端优先查看:
- `/Users/pinpaibu/server_code/likei-services/README.md`
- `/Users/pinpaibu/server_code/likei-services/rc-gateway/`
- `/Users/pinpaibu/server_code/likei-services/rc-auth/`
- `/Users/pinpaibu/server_code/likei-services/rc-service/`
- `/Users/pinpaibu/server_code/likei-services/rc-common-business/`
- `/Users/pinpaibu/server_code/likei-services/rc-service/rc-inner-api/`