# 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`
