Files
Web_BLS_ProjectConsole/openspec/changes/update-command-control-api/design.md

66 lines
1.6 KiB
Markdown
Raw Normal View History

## Context
命令下发从 Redis 队列模式迁移为 HTTP API 调用模式。
约束:
- 输入约定来自 UI用户输入一行文本按空格拆分。
- 需要通过 `targetProjectName` 将命令路由到目标项目的 `baseUrl`
## Goals / Non-Goals
- Goals
- 控制台通过后端统一出站调用目标项目 API避免浏览器跨域/鉴权差异)
- 统一请求格式,便于目标项目实现与观测
- 明确失败行为(目标项目不可达/超时/非 2xx
- Non-Goals
- 不定义目标项目内部如何执行命令
- 不在本次变更中引入鉴权体系(如需后续可另开 change
## Decision: baseUrl mapping via env JSON
改为由目标项目的 Redis 心跳模块提供 `apiBaseUrl`
### Heartbeat key
- Redis key: `${projectName}_项目心跳`
- Redis type: STRING
- Value: JSON string
示例:
```json
{
"apiBaseUrl": "http://127.0.0.1:4001",
"lastActiveAt": 1760000000000
}
```
### Liveness rule
- 目标项目应每 3 秒刷新一次 `lastActiveAt`(毫秒时间戳)
- 若后端检测到 `now - lastActiveAt > 10_000`,则视为离线并拒绝下发
## Decision: request shape
- UI 输入:`<apiName> <arg1> <arg2> ...`
- 后端对目标项目调用:默认 `POST ${baseUrl}/${apiName}`
- bodyJSON
```json
{
"commandId": "cmd-...",
"timestamp": "ISO-8601",
"source": "BLS Project Console",
"apiName": "reload",
"args": ["a", "b"],
"argsText": "a b"
}
```
## Timeouts / retries
- 单次请求设置合理超时(例如 5s
- 默认不重试(避免重复执行产生副作用);如需重试需目标项目提供幂等语义。