跳到主要内容
版本:0.4.x(Latest)

基本介绍

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判断指定路径资源是否存在
ScanYAML资源或其中的嵌套键扫描到目标结构体

动态插件接口

动态方法动态SDK方法说明
getManifest().GetManifest().ExistsManifest().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时默认使用getresources.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/根。

相关服务