开发 Bundle 插件服务
用公开 SDK 实现生命周期执行与检查,保存业务归属并在每次调用前解析引用。
插件拥有外部业务操作逻辑;平台负责认证、安装编排、授权投影与输出校验。 Rust 插件使用 crates.io 的公开协议库:
[dependencies]
baijimu-bundle-plugin = "=2.1.0"从 baijimu_bundle_plugin::bundle_plugin 导入 BundlePluginLifecycleRequest、
BundlePluginLifecycleResponse、BundlePluginReferenceRequest 和 BundlePluginReferenceResponse。
库版本、生命周期 5.0.0、引用 4.0.0 和 CModel envelope 1.0.0 分别管理。
执行与认证
提供 JSON POST Endpoint,在 bundleExecution 中登记 HTTPS 地址和支持的资源阶段。
按双向调用凭据
完成接入。验证平台访问插件的独立凭据,再严格反序列化请求并调用 SDK 校验。
按 operation.operationType、stage 与 intent 执行业务逻辑;不能把仅识别阶段当成支持全部操作。
resources 中的业务属性和逻辑引用只包含当前授权范围,不能依赖额外注入的字段。
完整示例见生命周期与引用协议。
外部状态与恢复
保存外部实例与完整 installation、资源 Locator、插件身份的关联,校验已传入实例的归属。
Runtime 拥有 operation.operationId 及阶段执行记录;插件根据业务系统真实结果处理同一次操作重试。
这不要求每个平台业务组件建立一套插件安装表。
APPLY 执行必要变更,INSPECT 只查询真实业务效果,COMPENSATE 根据当前事实撤销可撤销的本次效果。
超时不代表没有执行;无法证明结果时返回 UNKNOWN,不得伪造成功或直接重建实例。
DETACH 解除本次安装的关联,DELETE 的业务资源删除仍受所有权约束。
卸载清理使用生命周期身份校验归属,不能通过放宽引用访问授权来取得已撤销的凭据。
业务调用与重试
每次调用和重试前向平台入口发送 POST /bundle-plugin/service-reference/resolve。
保存的是 installation + resource + propertyKey,每次响应都必须校验相同身份与有效期。
先按当前 reference 的 Map 业务键、List 顺序或单个 serviceId 选择目标,再取对应 access[serviceId]。
地址与 Token 只在当前业务尝试中使用,不持久化;不得任取 access 的第一项,不得跟随重定向转发凭据。 解析失败、安装失效、过期、撤销或重绑都必须影响下一次调用,不使用旧值回退。 业务事件通过已授权的事件引用投递;用户委托见 Runtime 用户委托。
返回结果
使用完整 CModel envelope。成功 data 回显请求的协议、插件、安装、操作、阶段、意图,并返回 outcome 与
按资源 Locator 组织的 resources。仅 APPLIED 或 VERIFIED 可以返回获授权业务属性;其他结果不回写资源。
不得覆盖引用属性、用户自有配置或 Runtime 安装状态。空输出使用空对象。
请求非法、鉴权失败或执行错误使用标准非零 errorCode,公开错误详情不带 Token、上游原文或完整配置。
日志只记录必要关联身份与结果。没有实现的阶段不登记;已经登记的操作不能静默成功。
插件自有业务凭据
插件可以为自己拥有的业务实例签发服务 Token,并通过生命周期 resources 输出交给 Runtime。
例如 serviceAccessToken 可以是声明了 isSensitive: true 的字符串 Data 属性,由插件的
writeProperties 明确授权;需要在后续生命周期请求读取时,再显式授权 readProperties。
它不应加入 credentialProperties,后者只授权平台引用解析。
这类 Token 由业务后端负责签发、校验、轮换和撤销,按完整安装身份与业务实例隔离。
它不能复用 Hosted Service 共享管理 Token、平台调用插件的凭据、插件调用平台的凭据,或引用解析返回的 Token。
Runtime 校验当前资源、属性定义、写入授权和响应关联,只接受 APPLIED 或 VERIFIED 的获准输出;
移除中的资源不接受属性回写。现有生命周期输出合同已支持这一用途,无需另造业务 Token 交付接口。
业务后端应验证重试与 INSPECT 能识别同一安装的已生效凭据,不能因响应丢失而无条件再次签发。
按业务需要安全保存校验材料或用于重试交付的秘密,禁止记录明文 Token、完整请求或响应;
撤销和操作终结必须以真实业务效果为依据,不能借用 ACS 的平台令牌身份或把平台安装账复制到业务库。
操作终结
同时实现并登记Bundle 操作终结接口。 它先关闭精确操作的业务写入,再根据 Runtime 已提交的决定完成终结。公开 SDK 2.1.0 尚未提供该接口的 DTO, 需要按独立 wire 协议验证身份、查询当前决定并返回完整 CModel;不能把生命周期成功响应当作终结成功。