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. 后端能力

配置、受管出网与集成连接

后端插件经常需要三件事:读已绑定连接的配置(地址、凭据)、访问外部系统的 HTTP 接口、调用平台连接器。这一页讲这三个能力和一个地理辅助方法。
这些能力通过全局对象 platform 和 connector 使用,在 HTTP 回调、事件回调和流程脚本三条路线里都可用(权限照常申报)。

能力与权限对照#

方法需要的权限用途
platform.getConfig()config:get读当前连接的配置
connector.fetch(req)egress:fetch受管出网(HTTP 请求外部系统)
connector.invoke(id, payload)integration:write 或 integration.gis:read调平台连接器
platform.resolveSegment(lat, lng)geo.segment:read坐标解析路段

连接配置:声明形状,部署填值#

插件清单只声明"我需要哪些配置项",真实值由部署方在受控连接配置中提供。装载时平台校验缺键、多键和类型,不匹配即启动失败。
源清单 fh2-plugin.json:
{
  "connections": [{
    "id": "traffic.connector.cascade",
    "requires": [
      { "name": "baseUrl", "type": "string", "required": true },
      { "name": "password", "type": "string", "required": true, "secret": true }
    ]
  }]
}
真实连接值由部署方维护。插件作者提供连接 ID、字段声明和目标环境需求,并请部署方确认连接已绑定且可用;声明权限或方法已注入都不代表连接就绪。secret: true 只让启动日志不打印值,不加密配置本身,真实凭据不写入插件包。
在流程的 run_script 步里,用常量指定这次脚本用哪个连接:
{
  "action": "run_script",
  "inputs": {
    "script": { "const": "pull" },
    "connectorId": { "const": "traffic.connector.cascade" }
  }
}

platform.getConfig()#

返回该连接配置的深拷贝,并带上 connectorId。每次返回新对象,你在脚本里改它不影响后续调用。
const cfg = platform.getConfig()
// { baseUrl: "https://partner.example.com", password: "...", connectorId: "traffic.connector.cascade" }
注意:
配置在进程启动时读取一次;改了部署配置要由部署方重启后端运行时,插件热更不会刷新它。
连接 ID 写错(或没绑定)会直接抛错,错误信息里会点名是哪个连接。

connector.fetch():受管出网#

后端脚本环境没有裸网络(没有 fetch / XMLHttpRequest),访问外部系统只能走 connector.fetch:
connector.fetch({
  method?: string,          // 缺省按无 method 处理,建议显式给
  url: string,              // 必填,绝对 http/https URL
  headers?: object,         // string -> string
  body?: string | object,   // 对象会被 JSON 序列化
  timeoutSec?: number
}) -> { status: number, headers: object, body: string }
const cfg = platform.getConfig()
const response = connector.fetch({
  method: "POST",
  url: cfg.baseUrl + "/events",
  headers: { Authorization: "Bearer " + cfg.password },
  body: { cursor: input.cursor },
  timeoutSec: 10
})
if (response.status < 200 || response.status >= 300) {
  throw { code: "UPSTREAM_REJECTED", message: "上游返回 " + response.status }
}
const data = JSON.parse(response.body)   // body 不自动解析
硬限制(超出直接报错):
限制值
默认超时 / 单次上限15 秒 / 25 秒
响应体上限4 MiB
每次脚本调用请求次数32 次
累计出网时间40 秒
重定向不跟随,3xx 原样返回
⚠️ 出网目标受目标环境的出网白名单限制,主机不在名单里会被拒绝(支持精确主机或 .suffix 后缀)。白名单由部署方维护;接入前提交目标主机和业务用途,请部署方确认放行。拥有 egress:fetch 权限不代表任意目标都可访问。
⚠️ fetch 不帮你生成幂等键,也不拦副作用请求。发 POST/PUT 时用 run.idempotencyKey 派生稳定键,并把流程步的 maxAttempts 按上游语义收紧。

connector.invoke():调平台连接器#

const accepted = connector.invoke("custA.command-center", { recordId: "r-1", level: 2 })
integration:write 和 integration.gis:read 两个权限对应同一个方法。当前内置连接器多为演示用途,错误细节会被吞掉,不能作为可靠的外部集成通道——生产接入外部系统请用 connector.fetch。

platform.resolveSegment():坐标转路段#

const segment = platform.resolveSegment(39.9, 116.4)
⚠️ 当前实现是固定值桩(无论坐标是什么都返回同一路段名),不要据此做生产地理判断。

常见问题#

现象原因与处理
platform is not defined清单没申报 config:get(或当前脚本路线没配 allowlist)
connector is not defined没申报 egress:fetch 或 integration:*
出网请求因目标主机未获允许而被拒绝出网白名单没放行该主机,提交目标主机和用途,请部署方确认
fetch 出网次数超限一次脚本调用最多 32 个请求;拆分或减少调用
拿到的配置是旧值配置启动时读取;请部署方确认新配置并重启后端运行时
invoke 返回了但对方系统没收到内置连接器是演示用途;生产改用 connector.fetch
连接声明的完整字段见 plugin.json 契约。
修改于 2026-10-22 03:39:56
上一页
后端能力总览
下一页
事件与流程
Built with