百积木文档
开发指南Bundle 开发平台应用开发

声明应用能力

使用逻辑 interface 声明 Bundle 中平台应用可调用的最小方法范围,并由安装记录绑定具体实现。

平台应用的授权不是“登录后可以调用全部平台接口”。每个版本必须声明需要的能力,安装和用户授权共同把调用范围限制在当前工作区、当前安装、当前用户和已发布版本上。

methodDefinitionsJson

新平台应用声明可调用模块能力时统一使用逻辑 interface

[
  {
    "interface": "wechat-official-account",
    "methods": ["authorizationUrl", "listAuthorizedAccounts", "createDraft"]
  }
]
  • interface 是平台应用和 Bundle 共同认可的稳定逻辑名。
  • 安装时由 interfaceBindings 把逻辑名绑定到已安装模块的具体 businessId
  • service 形式仅为锁定具体 businessId 的存量版本保留,不用于新应用。
  • 每一项必须且只能包含 interface 或存量 service 之一。
  • methods 必须是非空数组。
  • 方法名按原始大小写保存,平台校验时不区分大小写。

发布协议不接受以下旧字段:

  • services
  • serviceId
  • businessId
  • runtimeBusinessId
  • serviceRef
  • runtimeServiceId

最小权限原则

只声明当前版本实际调用的方法。不要使用通配权限代替梳理接口,也不要因为后续“可能用到”就提前加入管理、删除或导出类方法。

当新版本扩大能力范围时:

  1. 发布新的平台应用版本。
  2. 更新并冻结新的 Bundle 版本。
  3. 升级目标工作区 Bundle 安装。
  4. 由用户重新确认新增授权范围。
  5. 验证旧 token 不会绕过新的权限边界。

只声明 Runtime 模块能力

平台应用不提供通用平台 HTTP 代理,也不能用 Manifest httpGrants 直接访问 bundle-serviceproject-serviceworkflow-engine 等平台内部服务。需要暴露的新 能力必须先定义为 Runtime 模块方法并发布不可变模块版本,再由平台应用版本声明该方法。

能力声明负责“允许调用什么”,网页授权负责“哪个用户同意调用”,运行态网关负责“这次 请求是否符合两者”。三者不能互相替代。

页面运行时不把 methodDefinitionsJson 或具体 businessId 发送给网关。页面把声明的 逻辑 interface 放进稳定的 services/{service}/methods/{method} 路径;App Gateway 再根据当前安装绑定解析具体实现。请求格式见 调用模块方法

本页内容