115 lines
2.9 KiB
Markdown
115 lines
2.9 KiB
Markdown
|
|
# softbus_api
|
|||
|
|
|
|||
|
|
**路径:** `src/softbus_api`
|
|||
|
|
**构建目标:** `softbus_api`(STATIC 库)
|
|||
|
|
**层级:** L1 契约层
|
|||
|
|
|
|||
|
|
## 1. 概述
|
|||
|
|
|
|||
|
|
`softbus_api` 定义跨模块共享的**控制面契约**。当前仅暴露 `ExecuteCommand` 结构体,作为 OPC UA Method、TCP 下行与边缘回调的统一载荷格式。
|
|||
|
|
|
|||
|
|
## 2. CONSTRAINTS
|
|||
|
|
|
|||
|
|
- `softbus_api` 仅定义跨边界命令语义,不包含传输或协议实现。
|
|||
|
|
- 新增命令类型须通过扩展 `command` 字段值实现,保持 `ExecuteCommand` 结构稳定。
|
|||
|
|
- JSON 序列化/反序列化与校验逻辑集中在本模块,调用方不得绕过 `validate()`。
|
|||
|
|
- 本模块不得依赖 transport、opcua、daemon 或 edge。
|
|||
|
|
|
|||
|
|
## 3. ExecuteCommand
|
|||
|
|
|
|||
|
|
### 3.1 结构定义
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
namespace softbus::api {
|
|||
|
|
|
|||
|
|
struct ExecuteCommand {
|
|||
|
|
std::string traceId;
|
|||
|
|
std::string objectRef;
|
|||
|
|
std::string command;
|
|||
|
|
nlohmann::json params;
|
|||
|
|
|
|||
|
|
static ExecuteCommand fromJson(const nlohmann::json& j);
|
|||
|
|
nlohmann::json toJson() const;
|
|||
|
|
bool validate(std::string* error) const;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.2 JSON 字段
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| `type` | string | 是(线协议) | 固定 `"executeCommand"`,仅线编码时包含 |
|
|||
|
|
| `traceId` | string | 是 | 追踪 ID |
|
|||
|
|
| `objectRef` | string | 是 | 五层对象路径 |
|
|||
|
|
| `command` | string | 是 | 命令名称 |
|
|||
|
|
| `params` | object | 是 | 命令参数 |
|
|||
|
|
|
|||
|
|
### 3.3 校验规则
|
|||
|
|
|
|||
|
|
`validate()` 检查:
|
|||
|
|
|
|||
|
|
1. `traceId` 非空
|
|||
|
|
2. `objectRef` 非空且为合法五层路径
|
|||
|
|
3. `command` 非空
|
|||
|
|
4. `params` 为 JSON 对象(非 null、非数组)
|
|||
|
|
|
|||
|
|
### 3.4 示例
|
|||
|
|
|
|||
|
|
**写值命令:**
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"type": "executeCommand",
|
|||
|
|
"traceId": "trace-cmd-001",
|
|||
|
|
"objectRef": "DemoSite/DemoSystem/DemoAsset/SimModbusDevice/Temperature",
|
|||
|
|
"command": "write",
|
|||
|
|
"params": {"value": 42.5}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**校验失败响应(OPC UA Method 出参):**
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"success": false, "error": "objectRef is invalid"}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**成功响应:**
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{"success": true}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4. 使用场景
|
|||
|
|
|
|||
|
|
| 调用方 | 场景 |
|
|||
|
|
|--------|------|
|
|||
|
|
| `UaMethodBinder` | OPC UA 客户端调用 `ExecuteCommand` Method |
|
|||
|
|
| `CommandDispatcher` | 校验并转发至 `TcpUplinkServer` |
|
|||
|
|
| `UplinkWire` | 编码/解码 TCP 线消息 |
|
|||
|
|
| `softbus_edge` | 接收下行命令并执行(Phase 1 仅日志) |
|
|||
|
|
|
|||
|
|
## 5. 数据流位置
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
OPC UA Client
|
|||
|
|
→ UaMethodBinder (JSON 入参)
|
|||
|
|
→ ExecuteCommand::fromJson() + validate()
|
|||
|
|
→ CommandDispatcher::dispatch()
|
|||
|
|
→ UplinkWire::encodeWireMessage()
|
|||
|
|
→ TCP → Edge commandHandler
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 6. 依赖
|
|||
|
|
|
|||
|
|
- `softbus_core`(`ObjectRef` 校验)
|
|||
|
|
- `nlohmann_json`
|
|||
|
|
- **被依赖:** softbus_transport, softbus_opcua, softbus_edge, softbus_daemon
|
|||
|
|
|
|||
|
|
## 7. Phase 2 规划
|
|||
|
|
|
|||
|
|
- 扩展命令类型:`read`、`subscribe`、`discover`
|
|||
|
|
- 增加命令响应结构 `ExecuteResult`(含 `statusCode`、`result` 字段)
|
|||
|
|
- 支持批量命令 `ExecuteCommandBatch`
|