12 KiB
12 KiB
后端接口对接规范
1. 目标
本文档用于 Aslan Flutter 项目后续与后端接口对接时统一协作边界、接口事实来源、前端落地位置、记录格式和问题流转方式。
核心原则:
- 前端可以只读查看后端代码、接口文档和契约,用于理解接口、字段、错误码、鉴权和业务边界。
- 前端绝对不能修改后端仓库中的任何代码、文档、配置、生成文件、SQL、资源或测试。
- 如果发现后端接口、字段、错误码或业务逻辑需要调整,只能整理建议和证据,由用户协调后端处理。
- 对接接口时禁止本地假数据兜底;接口报错、空数据、权限失败、字段缺失都必须按真实状态处理,不能用本地 mock 数据伪装成接口成功。
2. 当前前端项目事实
当前 Flutter 项目路径:
/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。
当前本机后端仓库路径:
/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/:后端辅助资料或报告,按需只读参考。
后端仓库类型:Java / Maven 多模块服务
说明:
- 后端代码仅用于接口 API 参考。
- 不要修改服务端任何代码。
- 如果服务端需要增加接口或者存在 bug,只能提出建议和证据。
4. 后端代码只读红线
后续任何前端线程、AI 或开发者,进入后端路径时必须遵守:
- 只允许查看、搜索、摘录和分析后端代码。
- 禁止创建、修改、删除、移动、格式化后端仓库中的任何文件。
- 禁止对后端仓库使用
apply_patch、编辑器保存、sed -i、重定向写文件、脚本生成、批量替换等写入方式。 - 禁止运行会改动后端仓库文件的命令,例如格式化、依赖整理、代码生成、数据库迁移生成、OpenAPI 生成、mock 生成。
- 默认不在后端仓库执行构建、测试、启动、Docker、Makefile 或脚本命令;如果确实需要运行,必须先说明目的、可能产生的文件影响,并得到用户明确允许。
- 禁止提交、暂存、切分支、rebase、merge、pull、push 后端仓库。
- 禁止把前端对接需要的临时标记写入后端代码注释或文档。
允许的只读命令示例:
ls
find
rg
sed -n
git status --short
git diff --stat
git show
git grep
如果命令可能产生缓存、日志、生成文件或配置变更,默认视为禁止。
5. 接口事实参考顺序
对接某个接口前,必须按以下顺序确认事实:
- 先看后端接口文档或 OpenAPI,确认 HTTP path、method、请求体、响应体、鉴权要求和错误码描述。
- 再看后端实际路由注册和 handler/controller,确认当前线上实现、参数解析、响应 envelope 和鉴权行为。
- 如接口由内部服务 API、DTO、Feign/RPC 或其它内部契约支撑,再看对应契约,确认字段语义、枚举、默认值和跨服务约束。
- 必要时查看后端 service/domain/storage 代码,只为理解业务规则和字段来源,不直接照搬内部实现到前端。
- 最后再查看业务说明文档,用于确认流程边界、当前限制和后续计划。
当接口文档、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.apiHostApiInterceptor.onRequest()每次请求会重新写入options.baseUrl = ATGlobalConfig.apiHostATGlobalConfig.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:
{
"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. 前端对接落地流程
每次对接新接口时,按以下步骤执行:
- 确认当前线程负责的业务板块,不能越界顺手处理其它模块。
- 只读查看后端接口文档、实际 handler/controller、契约和相关业务说明。
- 在前端记录接口事实:业务接口名、当前实际请求 path、method、auth、request、response、错误码、后端证据文件。
- 按当前项目分层落地:
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 组件,不放接口解析逻辑。
- 接口错误、空数据、鉴权失败、字段缺失必须展示真实状态或走既有错误流程,禁止本地假数据兜底。
- 如发现后端需要调整,写入“待后端确认事项”,明确“建议后端处理”,前端不改后端。
8. 本地假数据与兜底红线
对接真实接口时禁止:
- 接口报错后返回本地固定列表、固定对象或 mock JSON,让页面看起来正常。
- 字段缺失时在仓库层硬编码业务假值来绕过问题。
- 后端未返回权限、余额、身份、房间状态等关键字段时,前端自行推断并继续提交后续业务请求。
- 将调试用 mock、临时测试数据、接口样例数据留在正式逻辑中。
- 为了避免页面空态,把接口失败当作空列表成功。
允许:
- UI 展示空态、错误态、重试按钮、toast 或既有错误弹窗。
- 在开发调试环境中使用明确隔离的 mock,但不得进入正式接口对接逻辑。
- 对非关键展示字段使用产品确认过的展示默认值,例如空昵称展示
--;这不等同于业务数据兜底。
9. 接口事实记录模板
后续每个正式接入的接口,建议按以下格式记录在对应业务文档或本文件的接口记录区:
### 接口名称
- 业务板块:
- 后端来源:
- 接口文档 / 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 或占位实现。
- 前端需要新增接口、合并接口或调整响应字段。
- 当前前端需要真实接口,但后端尚未提供可用契约。
建议记录格式:
- 【待后端确认|业务板块|YYYY-MM-DD HH:mm CST】
问题:
证据:
前端影响:
建议后端处理:
所有建议由用户协调后端团队处理;前端线程只负责说明影响、提供证据和调整前端对接方案。
11. 验证要求
接口对接完成后,至少给出以下验证:
- 静态检查:按改动范围运行
flutter analyze或说明无法运行的原因。 - 模型解析:确认成功响应、空 body、字段缺失、错误响应不会导致非预期崩溃。
- 业务路径:验证页面正常加载、刷新、分页、提交、失败提示等主路径。
- 鉴权路径:验证未登录、token 失效或权限不足时走既有登录/错误流程。
- 回归范围:说明本次改动是否影响同仓库其它方法、共享模型、网络拦截器或全局错误处理。
如果是 bug 修复线程,还必须先说明 Root Cause,得到用户确认后再改代码,并坚持最小改动。
12. 当前可优先参考的前端文件
对接接口时,前端优先查看:
lib/chatvibe_data/sources/remote/net/network_client.dartlib/chatvibe_data/sources/remote/net/api.dartlib/chatvibe_data/sources/remote/net/at_logger.dartlib/chatvibe_data/models/enum/at_erro_code.dartlib/chatvibe_core/constants/at_global_config.dartlib/chatvibe_core/config/app_config.dartlib/chatvibe_core/config/configs/variant1_config.dartlib/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/