golang超快速轻量级OpenAPI规范检查与质量检测工具插件vacuum的使用
Golang 超快速轻量级 OpenAPI 规范检查与质量检测工具插件 vacuum 的使用
vacuum 是世界上最快的 OpenAPI 和 Swagger 规范检查工具,采用 Golang 编写,并受到 Spectral 的启发。它也与现有的 Spectral 规则集兼容。
安装方式
使用 Homebrew 安装
brew install daveshanley/vacuum/vacuum
使用 npm 安装
npm i -g @quobix/vacuum
使用 yarn 安装
yarn global add @quobix/vacuum
使用 curl 安装
curl -fsSL https://quobix.com/scripts/install_vacuum.sh | sh
使用 Docker 安装
docker pull dshanley/vacuum
运行方式:
docker run --rm -v $PWD:/work:ro dshanley/vacuum lint <your-openapi-spec.yaml>
使用 Go 运行
如果已安装 Go >= 1.16,可以使用 go run 构建并运行:
go run github.com/daveshanley/vacuum@latest lint <your-openapi-spec.yaml>
基本使用示例
检查 OpenAPI 规范
# 基本检查
./vacuum lint <your-openapi-spec.yaml>
# 显示详细检查结果
./vacuum lint -d <your-openapi-spec.yaml>
# 显示错误信息并包含代码片段
./vacuum lint -d -s <your-openapi-spec.yaml>
# 仅显示错误信息
./vacuum lint -d -e <your-openapi-spec.yaml>
批量检查多个文件
# 检查多个特定文件
./vacuum lint -d <spec1.yaml> <spec2.yaml> <spec3.yaml>
# 使用 glob 模式检查多个文件
./vacuum lint -d some/path/**/*.yaml
按类别检查
# 仅检查 schema 相关问题
./vacuum lint -d -c schemas <your-openapi-spec.yaml>
可用类别选项:
examples
operations
information
descriptions
schemas
security
tags
validation
owasp
报告生成
生成 HTML 报告
./vacuum html-report <your-openapi-spec.yaml|vacuum-report.json.gz> <report-name.html>
生成 Spectral 兼容的报告
./vacuum spectral-report <your-openapi-spec.yaml> <report-output-name.json>
生成 vacuum 报告
# 生成压缩报告
./vacuum report -c <your-openapi-spec.yaml> <report-prefix>
交互式仪表盘
./vacuum dashboard <your-openapi-spec.yaml|vacuum-report.json.gz>
自定义规则集
vacuum 支持使用自定义的 Spectral 兼容规则集:
# 关闭所有规则
./vacuum lint -r rulesets/examples/norules-ruleset.yaml <your-openapi-spec.yaml>
# 仅使用推荐规则
./vacuum lint -r rulesets/examples/recommended-ruleset.yaml <your-openapi-spec.yaml>
# 使用特定规则
./vacuum lint -r rulesets/examples/specific-ruleset.yaml <your-openapi-spec.yaml>
# 使用自定义规则
./vacuum lint -r rulesets/examples/custom-ruleset.yaml <your-openapi-spec.yaml>
# 启用所有规则
./vacuum lint -r rulesets/examples/all-ruleset.yaml <your-openapi-spec.yaml>
忽略特定检查错误
可以创建忽略文件来忽略特定检查错误:
# ignore-file.yaml 示例
<rule-id-1>:
- <json_path_to_error_or_warning_1>
- <json_path_to_error_or_warning_2>
<rule-id-2>:
- <json_path_to_error_or_warning_1>
- <json_path_to_error_or_warning_2>
使用忽略文件:
./vacuum lint --ignore-file <path-to-ignore-file.yaml> -d <your-openapi-spec.yaml>
配置
配置文件
可以在 vacuum.conf.yaml
文件中配置 vacuum,默认搜索路径:
- 工作目录
$XDG_CONFIG_HOME
${HOME}/.config
配置文件示例:
time: true
base: 'http://example.com'
lint:
silent: true
环境变量
可以使用环境变量配置全局标志,格式为:VACUUM_<flag>
。如果标志包含 -
,请替换为 _
。
vacuum 是一个功能强大且高效的 OpenAPI 规范检查工具,适用于各种规模的 API 项目。它的速度和灵活性使其成为 API 开发工作流程中的理想选择。
更多关于golang超快速轻量级OpenAPI规范检查与质量检测工具插件vacuum的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang超快速轻量级OpenAPI规范检查与质量检测工具插件vacuum的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用vacuum进行Golang OpenAPI规范检查与质量检测
vacuum是一个超快速、轻量级的OpenAPI/Swagger规范检查工具,专为高性能验证和linting设计。下面我将详细介绍如何在Golang项目中使用vacuum。
vacuum简介
vacuum的主要特点:
- 极快的验证速度(比传统工具快10-100倍)
- 支持OpenAPI 2.0/3.0/3.1规范
- 内置丰富的linting规则
- 可自定义规则集
- 支持多种输出格式(JSON、YAML、HTML等)
安装vacuum
1. 直接安装
go install github.com/daveshanley/vacuum@latest
2. 作为库引入
go get github.com/daveshanley/vacuum
基本使用示例
1. 命令行使用
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// 验证OpenAPI文档
cmd := exec.Command("vacuum", "lint", "openapi.yaml")
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("验证失败: %v\n", err)
os.Exit(1)
}
fmt.Println(string(output))
}
2. 编程方式使用
package main
import (
"fmt"
"github.com/daveshanley/vacuum/model"
"github.com/daveshanley/vacuum/motor"
"github.com/daveshanley/vacuum/rulesets"
)
func main() {
// 1. 加载OpenAPI规范文件
specBytes, err := os.ReadFile("openapi.yaml")
if err != nil {
fmt.Printf("无法读取文件: %v\n", err)
return
}
// 2. 创建规则集(使用内置推荐规则)
defaultRuleset := rulesets.BuildDefaultRuleSets()
// 3. 执行验证
resultSet := motor.ApplyRulesToRuleSet(&motor.RuleSetExecution{
RuleSet: defaultRuleset,
Spec: specBytes,
})
// 4. 处理结果
if resultSet.Errors != nil {
fmt.Println("发现验证错误:")
for _, err := range resultSet.Errors {
fmt.Printf("- %s (位置: %d:%d)\n", err.Message, err.Range.Start.Line, err.Range.Start.Column)
}
} else {
fmt.Println("OpenAPI规范验证通过!")
}
}
高级功能
1. 自定义规则
func customRulesExample() {
// 创建自定义规则集
customRuleset := rulesets.CreateRuleSet(
"我的自定义规则集",
"自定义OpenAPI验证规则",
rulesets.RuleSetDefinition{
"operation-tags": &rulesets.Rule{
Description: "每个操作必须有至少一个标签",
Severity: rulesets.Error,
Recommended: true,
RuleCategory: rulesets.RuleCategories{
rulesets.OperationsCategory,
},
Given: "$.paths[*][*]",
Then: &rulesets.RuleAction{
Field: "tags",
Function: "truthy",
},
},
},
)
// 使用自定义规则集验证
resultSet := motor.ApplyRulesToRuleSet(&motor.RuleSetExecution{
RuleSet: customRuleset,
Spec: specBytes,
})
}
2. 生成HTML报告
func generateHTMLReport() {
resultSet := motor.ApplyRulesToRuleSet(&motor.RuleSetExecution{
RuleSet: rulesets.BuildDefaultRuleSets(),
Spec: specBytes,
})
// 生成HTML报告
htmlReport := model.GenerateHTMLReport(resultSet)
err := os.WriteFile("report.html", []byte(htmlReport), 0644)
if err != nil {
fmt.Printf("无法生成报告: %v\n", err)
return
}
fmt.Println("HTML报告已生成: report.html")
}
集成到CI/CD流程
package main
import (
"fmt"
"os"
"github.com/daveshanley/vacuum/motor"
"github.com/daveshanley/vacuum/rulesets"
)
func main() {
// 在CI中严格验证
specBytes, _ := os.ReadFile("openapi.yaml")
strictRules := rulesets.BuildDefaultRuleSets()
strictRules.Rules["operation-operationId"] = &rulesets.Rule{
Description: "强制每个操作必须有operationId",
Severity: rulesets.Error,
Recommended: true,
RuleCategory: rulesets.RuleCategories{
rulesets.OperationsCategory,
},
Given: "$.paths[*][*]",
Then: &rulesets.RuleAction{
Field: "operationId",
Function: "truthy",
},
}
result := motor.ApplyRulesToRuleSet(&motor.RuleSetExecution{
RuleSet: strictRules,
Spec: specBytes,
})
if len(result.Errors) > 0 {
fmt.Println("CI验证失败:")
for _, err := range result.Errors {
fmt.Printf("- %s\n", err.Message)
}
os.Exit(1)
}
fmt.Println("OpenAPI规范验证通过,CI继续执行")
}
性能优化技巧
- 并行验证:vacuum内置并行处理,对于大型文档特别有效
- 缓存规则集:重复验证时复用规则集对象
- 选择性验证:只加载需要的规则
vacuum是Golang生态中验证OpenAPI规范的优秀工具,其出色的性能和灵活性使其成为API开发流程中的理想选择。