用途:介绍如何通过 RouterOS 的 /console/inspect REST 接口程序化探索其命令树,用于构建解析 RouterOS 命令、生成 API 架构的工具(如 restraml、rosetta)。
命令树结构:RouterOS 将配置与命令组织为层级树,节点类型分为 dir(目录)、path(可导航层级,常含命令)、cmd(可执行动作,如 add、set、print)、arg(命令参数,如 address=)。CLI 路径如 /ip/address/add 对应树中节点。
接口用法:端点 POST /rest/console/inspect,需基本认证,适用于所有 RouterOS 7.x。请求类型包括 child(列出子节点,返回 {type:child,name,node-type})、syntax(获取节点帮助文本,返回 {type:syntax,text})、highlight、completion。path 字段使用逗号分隔段而非斜杠,例如 /ip/address/add 写作 ip,address,add;根路径为空字符串。JavaScript 中数组 toString() 天然生成该格式。
遍历与危险路径:递归遍历时对 arg 节点可查询 syntax 获取描述。但 where、do、else、rule、command、on-error 这些脚本构造子树内的 arg 若查询 syntax,会导致 HTTP 服务器进程终止,必须跳过其 syntax 查询;在这些路径内枚举子节点(child)本身安全。
CLI 到 REST 映射:get/print 对应 GET;add 对应 PUT(创建);set 对应 PATCH(更新);remove 对应 DELETE;print 等动作对应 POST。POST 命令端点支持 .proplist(选择返回属性)与 .query(过滤表达式数组)。
架构生成:遍历树收集路径、命令、参数,按 cmd 类型生成 GET/PUT/PATCH/DELETE 或 POST 动作,arg 生成请求体属性或查询参数,syntax 的 desc 作为描述。可输出 inspect.json、RAML 1.0、OpenAPI 3.0 等格式,inspect.json 为某版本命令树的权威来源,可离线解析(设 INSPECTFILE 环境变量)。
限制:对活动路由器完整遍历需数分钟和数千次顺序 HTTP 请求,无批量 API;命令树随 RouterOS 版本及额外软件包变化。使用方式与具体实现等细节资料未完整提供。