- 在插件助手中新增 ValidateParams 函数,用于验证传入参数是否符合定义,确保参数的完整性和正确性。 - 更新 ExecuteAction 方法,集成参数验证逻辑,提升插件执行的安全性和可靠性。 - 示例程序中添加新的选项,展示如何生成插件API文档和OpenAPI/Swagger文档,增强用户体验。 此更新提升了插件系统的健壮性,便于开发者更好地管理和使用插件功能。
78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package main
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"os"
|
||
"path/filepath"
|
||
|
||
"github.com/darkit/goproxy/examples/plugin"
|
||
)
|
||
|
||
// 展示文档生成功能
|
||
func DocGeneratorExample() {
|
||
// 创建上下文
|
||
ctx := context.Background()
|
||
|
||
// 获取插件目录
|
||
pluginsDir := filepath.Join("..", "plugins", "dist")
|
||
if _, err := os.Stat(pluginsDir); os.IsNotExist(err) {
|
||
fmt.Printf("插件目录不存在: %s\n", pluginsDir)
|
||
return
|
||
}
|
||
|
||
// 创建插件管理器
|
||
pm := plugin.NewPluginManager(pluginsDir)
|
||
|
||
// 加载插件
|
||
fmt.Println("正在加载插件...")
|
||
if err := pm.LoadPlugins(); err != nil {
|
||
fmt.Printf("加载插件失败: %v\n", err)
|
||
return
|
||
}
|
||
|
||
// 初始化所有插件
|
||
if err := pm.InitPlugins(ctx); err != nil {
|
||
fmt.Printf("初始化插件失败: %v\n", err)
|
||
return
|
||
}
|
||
|
||
// 启动所有插件
|
||
if err := pm.StartPlugins(ctx); err != nil {
|
||
fmt.Printf("启动插件失败: %v\n", err)
|
||
return
|
||
}
|
||
|
||
// 创建文档输出目录
|
||
docsDir := "./plugin_docs"
|
||
if err := os.MkdirAll(docsDir, 0755); err != nil {
|
||
fmt.Printf("创建文档目录失败: %v\n", err)
|
||
return
|
||
}
|
||
|
||
fmt.Printf("将在 %s 目录生成API文档\n", docsDir)
|
||
|
||
// 创建文档生成器
|
||
docGen := plugin.NewDocGenerator(pm, docsDir)
|
||
|
||
// 生成所有文档
|
||
fmt.Println("正在生成API文档...")
|
||
if err := docGen.GenerateAllDocs(); err != nil {
|
||
fmt.Printf("生成文档失败: %v\n", err)
|
||
} else {
|
||
fmt.Printf("成功生成API文档!文档位于: %s\n", docsDir)
|
||
fmt.Println("文档包括:")
|
||
fmt.Println("- 索引页 (index.md)")
|
||
fmt.Println("- 按类型分组的插件列表 (plugins_by_type.md)")
|
||
fmt.Println("- 每个插件的详细文档 (<插件名>.md)")
|
||
}
|
||
|
||
// 停止所有插件
|
||
if err := pm.StopPlugins(ctx); err != nil {
|
||
fmt.Printf("停止插件失败: %v\n", err)
|
||
return
|
||
}
|
||
|
||
fmt.Println("\n示例结束")
|
||
}
|