1. 后端插件
插件化手册
  • FH2 插件开发手册
    • 产品简介
    • 典型场景
    • 发版说明
    • 快速开始
      • 快速开始总览
      • 第一个插件
      • 后端插件
      • 全栈闭环
    • AI辅助开发
      • AI 开发 Skill
      • 安装与复验
      • 第一个工程
      • 真实需求示例:现场问题上报
      • 改造已有工程
      • 调试与交付
    • 开发指南
      • 开发指南
      • 基础概念
        • 基础概念总览
        • 什么是插件开发
        • 平台架构
        • 前端宿主、扩展点与能力
        • 后端运行时、入口与权限
        • 开发流程
        • 安全与隔离
        • 支持范围与问题反馈
      • 开发指南
        • 开发指南总览
        • 前端插件
          • 前端插件深度指南
          • 前端工程结构
          • 插件清单(fh2-plugin.json)
          • 入口与生命周期
          • 界面与状态
          • 多宿主插件
          • 跨宿主通信服务
          • HTTP、WebSocket 与事件
          • 存储、Blob 与定时器
          • 工具链与本地调试页面
        • 后端插件
          • 后端开发深度指南
          • 后端插件的结构
          • 后端源清单 fh2-plugin.json
          • HTTP 接口处理函数
          • 消息订阅与事件处理函数
          • ctx 与能力注入
          • 数据存储与缓存
          • 流程编排
          • 触发方式
          • 连接外部系统
          • 流程编排练习(DAG)
        • 前后端协作
          • 前后端协作总览
          • 前后端共享契约
          • 端到端幂等
          • 事件、通知与状态
          • 统一错误模型
          • 链路标识与诊断日志
        • 完整练习
          • 环境准备
          • 第一个前端插件
          • 第一个后端插件
          • 第一个全栈插件
      • 能力总览
        • 能力地图
        • 能力可用性矩阵
        • 前端能力
          • 平台通用能力
            • 平台通用能力总览
            • 基础运行时:HTTP、事件、WebSocket 与存储
            • 导航、位置与通知
            • 弹窗、音频与剪贴板
            • 地图能力
            • 项目设备能力
            • WPMZ 与航线预览
            • 受控对象上传
          • 项目宿主
            • 项目宿主总览
            • 项目上下文
            • 项目侧边栏入口
            • 项目插件路由
            • 项目工作区
          • 消息宿主
            • 消息宿主总览
            • 消息告警弹层
            • 消息导航与通知
          • 计划库宿主
            • 计划库宿主总览
            • 计划库表单上下文
            • 计划库表单扩展
            • 校验、提交与 `biz_ext`
          • 驾驶舱
            • 驾驶舱插件能力总览
            • 驾驶舱扩展点
            • 上下文与遥测
            • 相机、检测与 AI
            • 场景几何与直播指针
            • 飞控、云台与任务
            • 驾驶舱平台事件
        • 后端能力
          • 后端能力地图
          • 后端能力总览
          • 配置、受管出网与集成连接
          • 事件与流程
          • 飞行任务与违停巡逻
          • 数据存储
          • 媒体与前端通知
          • 资源租约
          • 作业、目标轨迹与视频处理
      • 调试与测试
        • 调试与测试总览
        • 快速入门排错
        • 本地开发
        • Web IDE:打开工程与保存改动
        • 工作流编辑器:节点、接线与交付
        • 知识与 MCP:先判断需要哪一层事实
        • 前端本地调试
        • 后端运行时与流程调试
        • 模拟数据与测试数据
        • 集成测试与 E2E
        • 日志与链路追踪
        • 常见问题排查
      • 完整示例
        • 示例与案例总览
        • 项目侧边栏与工作区
        • 消息告警卡片
        • 计划表单任务清单
        • 驾驶舱动作与左侧面板
        • 最小后端插件
        • 最小全栈插件
        • 多宿主插件实战
        • 事故快处
        • 交通抓拍
        • 违停巡逻完整案例
      • 构建发布与安全
        • 构建、发布与安全
        • 质量门禁
        • 行业包构建与打包
        • 能力版本发布
        • 安装、升级与回滚
        • 安全基线
      • API参考
        • API 参考总览
        • 前端
          • 前端 API 参考
          • 前端插件清单结构
          • 前端 SDK API
          • 前端扩展点目录
          • 前端能力目录
          • 前端平台事件目录
          • 跨宿主通信服务 API
          • 工具链命令行参考(`fh2-plugin`)
        • 后端
          • 后端 API 参考
          • 后端插件源清单
          • 后端 HTTP 接口参考
          • 后端事件消费参考
          • 后端脚本上下文(`ctx`)
          • 后端数据存储
          • 流程编排语言
          • 流程触发器参考
          • 后端能力目录
          • 后端 HTTP API
        • 共享契约
          • 共享契约参考
          • 类型与契约目录
          • 错误模型
          • 版本兼容性
      • 附录
        • 错误码
        • 术语表
        • 常见问题
  1. 后端插件

后端插件的结构

一个后端插件 = 一个含 fh2-plugin.json(源清单)的目录。你写 TypeScript;构建时工具链把它编译打包成运行时可装载的普通 JS 和 dist/plugin.json(运行时清单)。这一页讲清:目录里放什么、三种入口怎么登记、构建前后是什么关系。

目录里放什么#

backend/my_backend/
├── fh2-plugin.json      # 源清单:身份、权限、声明有哪些脚本和流程
├── handlers/            # HTTP 接口脚本(放进去自动登记,一个文件一个接口)
│   └── example/create.ts    # → 接口名 example.create
├── events/              # 消息回调脚本(由清单 events[] 引用)
├── adapters/            # 流程用脚本(由清单 scripts[] 引用)
├── workflows/           # 流程编排 JSON(由清单 flows[] 列出,列了才装载)
├── shared/              # 多入口共用的业务逻辑(普通 TS 模块,相对 import)
├── types/               # fh2-plugin types 生成的类型声明,不要手改
├── schema.sql           # 建表 SQL:存储契约的唯一事实源
└── tsconfig.json

四种入口,登记方式不同#

入口放哪怎么登记名字怎么来
HTTP 接口处理函数handlers/**/*.ts自动发现,清单里不用写文件路径 + 命名导出:handlers/example/create.ts + export function create → example.create
事件处理函数events/*.ts清单 events[] 引用consumer.entry 指定导出名
流程脚本adapters/*.ts清单 scripts[] 引用name 字段,缺省取文件名
只读判定evaluators/*.ts清单 evaluators[] 引用name 字段;由受审步 evaluate 调用
构建后 HTTP 接口处理函数会得到稳定入口名(h_example_create),调用方用 example.create / example_create / h_example_create 三种写法都能寻址。
evaluators 是纯判定入口:注入面恒空,只能使用 log;需要读写数据或调用其他能力时,应使用流程脚本或事件回调。

源码与构建产物#

你写的(源码)构建后的(产物)
清单fh2-plugin.jsondist/plugin.json(运行时清单,宿主装载它)
代码handlers/ events/ adapters/ shared/ 下的 .tsdist/scripts/ 下的 JavaScript 打包文件
谁维护你工具链(fh2-plugin build),不要手改
后端插件必须先构建再部署:宿主装载的是 dist/ 产物,不是源码。build 只生成构建产物,pack 构建并组装交付包,两者都不启动服务。工程包含后端且未使用 --frontend-only 时,本地 dev 会构建后端并启动 HTTP 模拟器;它不是真实网关,也不执行流程或消息队列。详见后端调试。

运行环境的限制#

写脚本前先记住这几条,都是硬性的:
同步沙箱:没有 async/await、计时器、动态 import()、require、eval。要延迟/重试的事交给流程编排。
模块策略:允许从 ./ 相对路径导入本插件内的其他模块(比如 shared/);禁止 Node 内置模块、裸包导入。三种入口共用的逻辑放 shared/,一份事实,多处复用。
能力按 allowlist 注入:清单申报了 data:read/data:write,脚本里才有 store 这个全局对象;没申报的对象根本不存在(不是 null)。log 恒可用。
输入自己校验:input 原样透传,平台不校验。返回值必须是对象,原样放进响应的 data。

存储:schema.sql 是唯一事实源#

数据表由 schema.sql 单点定义;工具链从它派生存储实体投影进构建产物,作者不在清单里写 entities[]。生产环境由部署方在发布流程中执行 schema.sql(平台不会自动建表),本地 HTTP 模拟器按派生声明在内存建表。详见数据存储与缓存。

上下文与能力注入#

脚本签名是 <入口函数>(input, ctx)。前端插件的 ctx 上挂能力;后端正相反——能力是按 allowlist 注入的全局对象(store、cache、media……),ctx 只带请求信息。详见 ctx 与能力注入。

下一步#

清单字段逐个说明、写第一个接口:从第一个后端插件继续,然后看 HTTP 接口。
数据怎么存:数据存储与缓存。
修改于 2026-10-22 03:39:51
上一页
后端开发深度指南
下一页
后端源清单 fh2-plugin.json
Built with