3. RESTful API 设计原则:资源命名、无状态性、统一接口、HATEOAS 概念
在边缘计算场景中,HTTP API 是设备接入与数据采集的核心通信契约。REST(Representational State Transfer)架构风格为构建可伸缩、可维护的 Web 服务提供了设计准则。本章聚焦 RESTful API 的四大核心原则,帮助你在边缘网关与设备之间建立清晰、标准化的接口规范。
3.1 资源命名:用名词定义万物
REST 将一切视为“资源”(Resource),每个资源通过唯一的 URI 标识。资源命名应使用名词复数形式,避免动词,并采用层级结构表达从属关系。
| 原则 | 正确示例 | 错误示例 |
|---|---|---|
| 使用名词复数 | /devices |
/getDeviceList |
| 层级表达从属 | /devices/{id}/sensors |
/sensors?deviceId=123 |
| 小写字母 + 连字符 | /temperature-readings |
/TemperatureReadings |
| 避免文件扩展名 | /devices/123 |
/devices/123.json |
边缘实践建议:在边缘网关中,资源命名应反映物理设备拓扑。例如:
/gateways/{gwId}/modbus/devices/{devId}/registers/{addr},既清晰又便于路由。
3.2 无状态性:每个请求独立自足
无状态性要求服务器不保存客户端上下文。每个请求必须包含处理该请求所需的全部信息(认证令牌、参数、数据等)。
- 优势:水平扩展容易,任意服务器节点可处理任意请求;故障恢复无需会话迁移。
- 边缘场景挑战:设备可能频繁断连,无状态设计避免因会话丢失导致数据采集中断。
- 实现方式:使用 JWT(JSON Web Token)在请求头携带认证信息,而非依赖服务器 Session。
常见误区:不要在边缘 API 中依赖 Cookie 或 Session 维护设备登录状态。设备端应每次请求携带
Authorization: Bearer <token>。
3.3 统一接口:标准化的操作契约
统一接口通过有限的 HTTP 方法表达对资源的操作,使 API 行为可预测。边缘设备接入中最常用的方法如下:
| HTTP 方法 | 操作语义 | 边缘设备场景示例 | 请求体 | 响应体 |
|---|---|---|---|---|
| GET | 读取资源 | 查询设备当前温度 | 无 | 资源表示 |
| POST | 创建资源 | 注册新传感器 | 资源数据 | 新资源 URI |
| PUT | 全量替换资源 | 更新设备配置 | 完整资源 | 更新后资源 |
| PATCH | 部分更新资源 | 修改设备阈值 | 差异字段 | 更新后资源 |
| DELETE | 删除资源 | 移除离线设备 | 无 | 204 No Content |
统一接口的附加约束:
- 资源表示:使用 JSON 或 CBOR(适合低带宽边缘场景)。
- 自描述消息:通过
Content-Type和Accept头协商格式。 - 超媒体驱动:见下文 HATEOAS。
3.4 HATEOAS:让 API 自导航
HATEOAS(Hypermedia As The Engine Of Application State)是 REST 的成熟度第 3 级。服务器在响应中嵌入链接,客户端通过链接发现后续操作,无需硬编码 URI。
// 边缘设备列表响应示例(含 HATEOAS 链接)
{
"devices": [
{
"id": "sensor-001",
"type": "temperature",
"value": 23.5,
"unit": "°C",
"_links": {
"self": { "href": "/devices/sensor-001" },
"readings": { "href": "/devices/sensor-001/readings" },
"config": { "href": "/devices/sensor-001/config" },
"calibrate": { "href": "/devices/sensor-001/calibrate" }
}
}
],
"_links": {
"self": { "href": "/devices?page=1" },
"next": { "href": "/devices?page=2" },
"register": { "href": "/devices" }
}
}
边缘价值:当边缘网关固件升级后新增功能(如远程校准),HATEOAS 允许旧版客户端自动发现新端点,无需同步更新代码。
3.5 四大原则关系总览
下图展示了 RESTful API 四大原则在边缘设备接入中的协作关系:资源命名定义数据模型,无状态性保障请求独立性,统一接口提供标准操作,HATEOAS 实现动态导航。
3.6 边缘场景中的 REST 成熟度模型
Leonard Richardson 提出的 REST 成熟度模型(RMM)将 API 分为 4 个等级。边缘设备接入通常从 Level 2 起步,逐步演进到 Level 3。
| 等级 | 名称 | 特征 | 边缘适用性 |
|---|---|---|---|
| Level 0 | POX(Plain Old XML) | 单一 URI,仅用 POST,SOAP 风格 | 遗留 Modbus/PLC 网关,不推荐 |
| Level 1 | 资源化 | 多 URI 表达资源,仍只用 POST | 过渡阶段,部分工业网关使用 |
| Level 2 | HTTP 动词 | 正确使用 GET/POST/PUT/DELETE + 状态码 | 边缘设备接入最低推荐等级 |
| Level 3 | 超媒体(HATEOAS) | 响应包含链接,客户端可动态发现操作 | 适合固件频繁更新的边缘网关 |
边缘网关 API 设计检查清单:
- ✅ 所有资源 URI 使用名词复数,如
/sensors、/actuators。 - ✅ 每个请求携带
Authorization头,不依赖服务器 Session。 - ✅ 使用标准 HTTP 状态码:200 OK、201 Created、400 Bad Request、404 Not Found、429 Too Many Requests。
- ✅ 响应中包含
_links字段,至少提供self链接。 - ✅ 支持
Content-Type: application/json和application/cbor(低带宽场景)。