增强插件系统:添加参数验证功能

- 在插件助手中新增 ValidateParams 函数,用于验证传入参数是否符合定义,确保参数的完整性和正确性。
- 更新 ExecuteAction 方法,集成参数验证逻辑,提升插件执行的安全性和可靠性。
- 示例程序中添加新的选项,展示如何生成插件API文档和OpenAPI/Swagger文档,增强用户体验。

此更新提升了插件系统的健壮性,便于开发者更好地管理和使用插件功能。
This commit is contained in:
2025-03-14 13:32:36 +08:00
parent 2e29253909
commit cc4c677553
8 changed files with 2330 additions and 1 deletions

View File

@@ -0,0 +1,83 @@
package main
import (
"context"
"fmt"
"os"
"path/filepath"
"github.com/darkit/goproxy/examples/plugin"
)
// 展示客户端代码生成功能
func ClientGeneratorExample() {
// 创建上下文
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
}
// 创建客户端代码输出目录
clientDir := "./client_code"
if err := os.MkdirAll(clientDir, 0755); err != nil {
fmt.Printf("创建客户端代码目录失败: %v\n", err)
return
}
fmt.Printf("将在 %s 目录生成客户端代码\n", clientDir)
// 创建客户端代码生成器
// 参数插件管理器、输出路径、模块名称、语言默认为go
clientGen := plugin.NewClientGenerator(pm, clientDir, "github.com/darkit/plugin-client", "go")
// 生成客户端代码
fmt.Println("正在生成客户端代码...")
if err := clientGen.GenerateAllClients(); err != nil {
fmt.Printf("生成客户端代码失败: %v\n", err)
} else {
fmt.Printf("成功生成客户端代码!代码位于: %s\n", clientDir)
fmt.Println("生成的代码包括:")
fmt.Println("- 基本客户端代码 (client/client.go)")
fmt.Println("- 模型定义 (client/pkg/models/models.go)")
fmt.Println("- 按插件类型生成的客户端 (client/pkg/<类型>/*.go)")
fmt.Println("- 示例代码 (client/example/main.go)")
fmt.Println("\n使用生成的客户端代码:")
fmt.Println("1. 将生成的代码复制到你的项目中")
fmt.Println("2. 调整模块名称以匹配你的项目")
fmt.Println("3. 根据示例代码创建客户端实例并调用方法")
}
// 停止所有插件
if err := pm.StopPlugins(ctx); err != nil {
fmt.Printf("停止插件失败: %v\n", err)
return
}
fmt.Println("\n示例结束")
}