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 实现动态导航。

RESTful API 四大原则协作关系 RESTful API 资源命名 名词复数 / 层级 URI 无状态性 请求自足 / 无会话 统一接口 GET/POST/PUT/DELETE HATEOAS 超媒体链接导航 边缘设备接入中的实践要点 资源命名反映物理拓扑 → 无状态请求携带 JWT → 统一接口操作设备数据 → 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(低带宽场景)。