定义
RESTful 指基于 HTTP 的 REST 架构风格,使用 GET/POST/PUT/DELETE 等标准方法操作资源。设备管理平台通过 RESTful API 提供设备管理、数据查询、OTA 下发等能力,与 OpenAPI 规范结合,便于第三方系统集成。
设计原则与规范
RESTful 强调资源化 URL(如 /devices/{id})、无状态、统一接口。GET 用于查询、POST 用于创建、PUT/PATCH 用于更新、DELETE 用于删除;状态码(200、201、400、404、500)表达操作结果。设备管理平台 API 通常采用版本前缀(如 /v1/devices)、分页参数、过滤与排序,支持 JSON 请求/响应。与 OpenAPI(Swagger)规范结合,可自动生成文档、SDK 及 Mock 服务。
与 DMP 的典型接口
平台 RESTful API 涵盖设备 CRUD、批量查询、OTA 任务创建与查询、告警与事件订阅、遥测数据聚合等。第三方系统(如 ERP、EAM、BI 工具)通过 API 拉取设备状态、运维指标或下发控制指令。需配合鉴权(OAuth2、API Key)、限流、Audit Log 审计,保障安全与稳定性。
应用场景
适用于系统集成、自动化运维、数据导出、移动端与第三方应用对接。RESTful 凭借标准化与生态成熟度,成为设备管理平台对外开放的主流接口形式。
资源标识与动作语义如何分开
REST 风格接口把设备、分组、升级任务、告警这些对象当成资源,用路径里的标识定位,用方法表达读取或变更。查询放在获取方法上,创建用提交,整体替换和局部更新不要混成同一个未说明的动作。删除应指向一个已经存在的资源。把“重启设备”这种动作硬塞进资源路径时,可以建成任务资源:提交一次任务,再获取任务的状态,而不是发明一个没有结果表示的动词路径。
标识必须稳定。用会随备注修改的显示名当路径,集成方保存的链接会失效。分页要有稳定次序和下一页标记,不能只靠偏移,否则创建和删除发生在翻页期间时,调用方会漏掉或重复看到同一台设备。过滤条件写在查询参数里,响应里带回实际生效的条件,避免调用方以为按站点过滤、服务端却忽略了未知参数并返回全量。错误体应带可机器读取的原因码,不能只返回一段随版本变化的句子。
幂等写操作可以重试的前提
网络超时后能否重试,取决于这个写操作重复执行是否和执行一次等价。带调用方提供的幂等键的创建,第二次应返回第一次的结果,而不是再建一个升级任务。没有幂等键的提交,超时后调用方无法知道任务是否已生成,盲目重试会得到两份任务。使用条件因此是:所有会改变设备或任务的接口都接受幂等键,并在足够长的时间内记住这个键对应的结果。
获取方法不应产生副作用。有的实现把“获取设备”写成顺便刷新在线状态或记下导出审计之外的业务变更,重试和预取都会把状态改掉。需要审计的读取应明确是导出动作,而不是伪装成普通查询。认证失败、权限不足和资源不存在要用不同的状态,避免为了“不暴露设备是否存在”把所有失败都说成不存在,使集成方无法区分密钥错误和标识写错。限流时应告知可以再试的等待,而不是直接断开。
把长任务塞进同步接口
升级、批量改参、大范围导出都不能放在一次请求里等到做完。连接会先超时,调用方重试,服务端却可能仍在做第一次。正确的拆法是提交后立刻返回任务标识,进度用另一个获取接口读取,完成或失败再由事件推送通知。同步接口只保留确实能在短时限内结束的校验,例如参数是否符合物模型。
另一个常见错误是用查询字符串携带密钥,或把上一页的完整数据放进下一页地址。密钥会进访问日志,完整数据会让地址长到被截断。密钥放在头里,分页只携带位置标记。版本应写在路径中,破坏兼容的变更才升级版本;在同一版本里删除字段,旧的调用方会在运行时才发现缺值。响应若同时提供两种时间格式且不声明时区,对账时的日界会错一天,接口说明里要固定一种带时区的写法。
接口变更记录要写给调用方看:新增了什么可选字段、哪些字段仍保证存在、错误码有没有新增。只在内部分享的差异说明,外部系统会在运行中才遇到解析失败。对会创建任务的提交,响应里返回任务标识和查询该任务的路径,调用方不必猜测地址拼接规则。列表接口的默认排序写进说明并保持稳定,未说明的默认排序一旦改变,靠翻页去重的集成会漏数。废弃版本在关闭前给出仍在调用的集成名单,确认停止后再下线。调用方收到尚未识别的新字段时应忽略并继续处理已知字段,而不是整包失败。这个兼容约定写进每一版说明,避免可选扩展把旧系统全部打断。