基本介绍
services.Manifest()返回当前插件作用域的manifest资源读取服务。路径始终相对manifest/目录,例如读取manifest/profile.yaml时传入profile.yaml。
动态插件使用同一语义,但必须在plugin.yaml中声明manifest服务和允许读取的paths。
能力阶段:运行期
类型支持:源码插件、动态插件
能力设计
资源绑定机制
资源绑定当前插件:源码插件来自嵌入文件系统,动态插件来自发布产物或宿主绑定的产物资源。路径必须规范,使用斜杠分隔,禁止通过相对路径逃逸当前插件manifest/根。
资源类型
| 路径示例 | 说明 |
|---|---|
profile.yaml | 插件简介或展示元数据 |
config/config.example.yaml | 配置模板,不参与运行时默认读取 |
config/config.yaml | 插件默认配置来源之一 |
i18n/zh-CN/plugin.json | 中文语言资源 |
sql/install.sql | 安装脚本原始资源 |
只读原始资源语义
读取资源不代表执行SQL、注册语言包或应用配置。配置读取有专用能力,运行时配置值使用Plugins().Config()或动态config.get,不要直接读取config/config.yaml来绕过优先级。
接口定义
源码插件接口
| 方法 | 说明 |
|---|---|
Get | 读取指定路径的原始字节内容 |
Exists | 判断指定路径资源是否存在 |
Scan | 将YAML资源或其中的嵌套键扫描到目标结构体 |
动态插件接口
| 动态方法 | 动态SDK方法 | 说明 |
|---|---|---|
get | Manifest().Get、Manifest().Exists、Manifest().Scan | 读取授权路径下的原始资源 |
能力使用
源码插件使用
源码插件通过services.Manifest()读取随插件发布的资源:
// 读取插件简介
content, err := services.Manifest().Get(ctx, "profile.yaml")
// 判断资源是否存在
exists, err := services.Manifest().Exists(ctx, "i18n/zh-CN/plugin.json")
// 扫描YAML资源到结构体
var config PluginConfig
err := services.Manifest().Scan(ctx, "config/config.yaml", "", &config)
动态插件使用
动态插件在plugin.yaml中声明manifest服务和授权路径:
hostServices:
- service: manifest
methods:
- get
resources:
paths:
- profile.yaml
- i18n/zh-CN/plugin.json
manifest省略methods时默认使用get。resources.paths必须是相对manifest/的路径,不要写成manifest/profile.yaml。在动态插件侧使用:
// 读取插件简介
content, err := pluginbridge.Default().Manifest().Get(ctx, "profile.yaml")
// 判断资源是否存在
exists, err := pluginbridge.Default().Manifest().Exists(ctx, "i18n/zh-CN/plugin.json")
设计约束
- 只读原始资源。 读取资源不代表执行
SQL、注册语言包或应用配置。 - 配置读取有专用能力。 运行时配置值使用
Plugins().Config()或动态config.get,不要直接读取config/config.yaml来绕过优先级。 - 资源绑定当前插件。 源码插件来自嵌入文件系统,动态插件来自发布产物或宿主绑定的产物资源。
- 路径必须规范。 使用斜杠分隔,禁止通过相对路径逃逸当前插件
manifest/根。