Files
wind_power_cal/.claude/skills/backend-conventions/SKILL.md
T
2026-07-14 15:43:18 +08:00

85 lines
3.2 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.
---
name: backend-conventions
description: 后端 C++ 规范。用于修改本仓库后端接口、Controller、Manager、配置文件与接口文档时,统一 JSON 处理、字段命名、响应结构与文档同步要求。
---
# 后端规范
## JSON 规则
- 统一使用 `nlohmann/json`
- 在实现文件中统一写:`using json = nlohmann::json;`
- 禁止新增 `jsoncpp` 依赖
- 解析请求体时必须处理非法 JSON 分支
## Drogon 响应构建
- 优先复用 `ResponseUtil`,避免每个接口自行拼装响应
- 明确设置 `Content-Type: application/json`
- 可预期失败走业务错误响应,不直接向前端暴露底层异常细节
示例:
```cpp
auto resp = HttpResponse::newHttpResponse();
resp->setContentTypeCode(CT_APPLICATION_JSON);
resp->setStatusCode(k200OK);
resp->setBody(ResponseUtil::GenerateSuccessResponse(data).dump());
callback(resp);
```
## 字段命名
- 请求体、响应体、配置文件统一 `snake_case`
- 禁止在 JSON 中混用 `camelCase`
## 响应约定
- 响应结构和状态码语义以当前模块现状为准(不要凭空定义新格式)
- 错误码与错误文案保持稳定,避免前后端契约漂移
## 日志与错误信息
- 先复用同模块既有日志前缀和措辞
- 对外错误信息默认中文(除非该接口已约定英文)
- 不要无故把已有中文日志改成英文
## 文档同步
- 改后端接口时,必须同步更新该模块 `docs/接口文档.md`
- 若前端有 API 封装,同提交同步更新封装层
- 新增接口时补齐:路径、方法、参数、成功/失败示例
- **每次新增或修改协议时,必须同步更新 `collector/docs/协议支持清单.md` 文档**
- **每次新增协议或修改协议细节时,必须在 `collector/docs/protocols/` 下新增或更新对应的协议实现文档,并且文档内强制要求写入底层依赖库来源及其具体安装/编译方式**
## 协议开发规范
- **新增协议驱动时,严禁在应用层类中直接调用底层的原生 API(如原生 Socket API、原生串口操作函数等),除非有特殊需求需要和我确认。**
- **必须注入并使用通用的公共类进行通信,例如:**
- TCP 连接使用 `TcpTransport`
- UDP 连接使用 `UdpTransport`
- 串口连接使用 `SerialTransport`
- 这些类均应继承自核心抽象接口 `ITransport`
## 协议配置规范
> 详细规则参见 `collector/docs/协议支持清单.md` 的"更新规范"章节。
### protocol_name
- 全大写 + 下划线:`MODBUS_TCP``FINS_TCP`
- 同一协议不同连接方式**拆分为独立条目**,后缀:`_TCP`/`_RTU`/`_SERIAL`/`_OVERTCP`
- 驱动注册标识必须与 `protocol_name` 完全一致
### brand
- 有品牌协议:使用品牌原名,不附加连接方式或描述
- 通用协议(Modbus/OPC UA):使用标准协议名
- 无品牌行业标准:使用**应用领域**(如 `"电力仪表"`, `"水气仪表"`),避免与 protocol_name 重复
-`"西门子"`, `"电力仪表"` / ❌ `"哈斯串口"`, `"IEC104"`(与 protocol_name 冗余)
### connection_type
- 每个协议条目只允许一种 `connection_type``"ethernet"``"serial"`
- 需要同时支持串口和以太网时,新增独立协议条目