开发指南Bundle 开发平台应用开发
声明应用能力
使用逻辑 interface 声明 Bundle 中平台应用可调用的最小方法范围,并由安装记录绑定具体实现。
平台应用的授权不是“登录后可以调用全部平台接口”。每个版本必须声明需要的能力,安装和用户授权共同把调用范围限制在当前工作区、当前安装、当前用户和已发布版本上。
methodDefinitionsJson
新平台应用声明可调用模块能力时统一使用逻辑 interface:
[
{
"interface": "wechat-official-account",
"methods": ["authorizationUrl", "listAuthorizedAccounts", "createDraft"]
}
]interface是平台应用和 Bundle 共同认可的稳定逻辑名。- 安装时由
interfaceBindings把逻辑名绑定到已安装模块的具体businessId。 service形式仅为锁定具体businessId的存量版本保留,不用于新应用。- 每一项必须且只能包含
interface或存量service之一。 methods必须是非空数组。- 方法名按原始大小写保存,平台校验时不区分大小写。
发布协议不接受以下旧字段:
servicesserviceIdbusinessIdruntimeBusinessIdserviceRefruntimeServiceId
最小权限原则
只声明当前版本实际调用的方法。不要使用通配权限代替梳理接口,也不要因为后续“可能用到”就提前加入管理、删除或导出类方法。
当新版本扩大能力范围时:
- 发布新的平台应用版本。
- 更新并冻结新的 Bundle 版本。
- 升级目标工作区 Bundle 安装。
- 由用户重新确认新增授权范围。
- 验证旧 token 不会绕过新的权限边界。
只声明 Runtime 模块能力
平台应用不提供通用平台 HTTP 代理,也不能用 Manifest httpGrants 直接访问
bundle-service、project-service、workflow-engine 等平台内部服务。需要暴露的新
能力必须先定义为 Runtime 模块方法并发布不可变模块版本,再由平台应用版本声明该方法。
能力声明负责“允许调用什么”,网页授权负责“哪个用户同意调用”,运行态网关负责“这次 请求是否符合两者”。三者不能互相替代。
页面运行时不把 methodDefinitionsJson 或具体 businessId 发送给网关。页面把声明的
逻辑 interface 放进稳定的 services/{service}/methods/{method} 路径;App Gateway
再根据当前安装绑定解析具体实现。请求格式见
调用模块方法。