Skip to content

Knife4x Go ​

Knife4x 是面向 Go / Rust 宿主的进程内嵌入式 OpenAPI 3 UI 与调试控制台。 当前已发布 Go v0.8.6,Rust 后置。它复用 Knife4j Next 的 React UI,但 module、 版本和发布流程独立于 Java 5.x。

OpenAPI 3.1 / 3.2 与发布版本

Go v0.6.0 将共享 React UI 的 OpenAPI 3.1.x 加载、Schema、调试诊断、导出与变化提示纳入发布, 完整边界见 OpenAPI 3.1 支持与迁移。Go v0.8.0 将同一套 UI 的 OpenAPI 3.2.x 消费纳入发布,见 OpenAPI 3.2 支持矩阵。已发布入口接受 OpenAPI 3.0.x / 3.1.x / 3.2.x JSON,不支持 YAML 入口。下方 v0.5.0 及更早小节保留各自历史范围,不包含这些后续改动。

安装 ​

Go module 需要 Go 1.22 或更高版本:

bash
go get github.com/songxychn/knife4j-next/knife4x/go@v0.8.6

仓库中的 Gin 可运行示例 是独立 module,需要 Go 1.26+;其 Gin 依赖与版本要求不会传递给公共库消费者。

v0.8.6 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 相较于 v0.8.5,共享 React UI 更新同主版本依赖与 docx,并迁移 React Router 7、Vite 8、React 19 和 Ant Design 6;适配页签滚动及外部资源面板组件(PR #843、#847、#849、#851、#853、#861、#864、#865)。OAS3 开发工具迁移至 ESLint 10,UI 同步要求 Node 22.13+ 或 24+。OAS3 三个工作区统一使用 TypeScript 6.0.3,core 输出目标由 ES5 调整为 ES2015,不再提供 ES5 降级输出;包入口、公开 API 与 Vite UI 编译目标保持(PR #867)。本版本不升级 Go 依赖。

v0.8.5 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 相较于 v0.8.4,共享 React UI 修复调试正文格式化与快照写入,并收敛表单状态和测试边界(PR #837)。

v0.8.4 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 相较于 v0.8.3,共享 React UI 统一 JSON 示例与预览层级折叠,并修正请求预览词法保真与空容器折叠(PR #833)。

v0.8.3 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 相较于 v0.8.2,共享 React UI 修复 OAS 3.2 标签 Tooltip 重复名称(PR #826)、改进 OAS 3.2 文档 Schema 元校验错误定位(PR #828)、普通 JSON 示例默认展示逻辑数据并保留发送原文入口(PR #827),以及调试 JSON 响应折叠、字段说明列与等价 cURL 排版(PR #830)。

v0.8.2 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 相较于 v0.8.1,共享 React UI 修复 OAS 3.2 标签菜单重复名称(PR #817)、首页服务地址明细默认折叠(PR #818),以及窄窗口首页统计卡片与外壳横向溢出(PR #820)。

v0.8.1 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 相较于 v0.8.0,共享 React UI 修复 OAS 3.1 SchemaEngine 元校验失败后再次评估可能错误放行 (PR #810)。

v0.8.0 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 相较于 v0.7.1,共享 React UI 发布 OpenAPI 3.2.x 消费:独立解析、资源图、Schema 会话、 QUERY / 自定义方法、离线导出、变化协议 oas3.2-v1,以及调试页 Server 解析详情默认收起 (总路线 #767,验收 PR #807)。入口仍不接受 YAML。

v0.7.1 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 相较于 v0.7.0,共享 React UI 修复 OAS 3.1 非 ASCII 分组名下入口文档自引用 $ref 与 retrieval URI 身份错配,避免整篇接口降级(PR #798)。

v0.7.0 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 相较于 v0.6.0,共享 React UI 新增:

  • OAS 3.1 浏览器登录会话调试:可复用浏览器会话,旧缓存保持手填模式;默认同源,跨 origin 需显式 include、服务端凭据 CORS 与浏览器策略允许。Cookie 值不写入预览或历史,cURL 需另行配置会话,手填 Cookie 真实发送仍阻断(PR #763)。
  • 枚举下拉框输入过滤(PR #757)与接口目录当前分组标题吸顶(PR #762)。
  • Schema 根节点与真实 items 字段的标签区分(PR #761)。

完整会话语义与限制见 OpenAPI 3.1 支持与迁移。

v0.6.0 ​

Go 1.22 基线、module 路径、Config、NewHandler 与路由语义保持不变。 内嵌 React UI 新增以下能力,已有 OAS 3.0.x 路径继续保留:

  • OAS 3.1 与 JSON Schema 2020-12 字段树和模型,保留作者示例,并在预算内生成经校验的候选示例。
  • 参数与 JSON、urlencoded、multipart 请求体的 Schema 校验和编码,以及非阻断的 JSON 响应诊断。
  • 对已发现的精确 URI 授权后加载跨文档资源,以同一不可变资源图支持解析、诊断、导出和变化提示。
  • 在完整资源图下导出可移植的单接口 OpenAPI JSON;HTML、Markdown、DOC、DOCX 使用同一离线快照;paths 操作的变化指纹与 OAS 3.0 基线隔离。
  • 修复长 FQN 类型挤压字段列及悬浮预览溢出,并补齐资源消费、编码锚点导出和示例缺失诊断。

外部资源默认拒绝,SchemaEngine 只使用已登记的资源,不自行联网;不执行未知方言或自定义词汇。 显式 Cookie 参数仅支持预览和 cURL,浏览器真实发送前阻断;不提供 Cookie jar 写入、主动 Webhook 调用 或 mutualTLS 客户端证书注入。完整能力与浏览器限制见 OpenAPI 3.1 支持与迁移。

已合并改动包括示例 #715、 资源图 #727、 表单 #728 / #730、 单接口导出 #732 / #733、 离线导出 #734、 变化提示 #736、 FQN 展示 #731,以及 Schema 预扫描 #743 和 后续语义修复 #750。

v0.5.0 ​

Go Handler API 与路由语义保持不变,内嵌 React UI 新增页签左右关闭、响应状态概要、 Knife4j 本地数据安全清理、单接口 OpenAPI 3.0.x 下载,以及按分组隔离的接口新增/变化提示。

v0.4.2 ​

Go Handler API 与路由语义保持不变,内嵌 React UI 修复动态参数开关未接入表单请求体 的问题;开启后,urlencoded 与 multipart Body 可以添加 OpenAPI 未声明的文本字段, 并在预览、真实请求、缓存、历史与重置间保持一致。

v0.4.1 ​

Go Handler API 与路由语义保持不变,内嵌 React UI 恢复 HTML、DOC、DOCX 与整篇 Markdown 离线导出中的请求示例和响应示例,并覆盖显式 example、named example、本地 引用与 schema 生成回退。

v0.4.0 ​

Go Handler API 与路由语义保持不变,内嵌 React UI 支持对当前可见的 Path、Query、 Header 与 Cookie 参数批量选择;HTML、DOC、DOCX 与整篇 Markdown 共用一致的离线 导出内容模型,Word 导出提供 tag -> API 两级大纲与原生编号。

v0.3.0 ​

Go Handler API 与路由语义保持不变,内嵌 React UI 同步新能力:请求参数支持“全部分组” 和“当前分组”两级作用域;请求参数、Cookie 会话与 OpenAPI 鉴权拆分为独立页面, Cookie 与鉴权仍严格按分组隔离。

最小接入 ​

先由业务 Handler 提供 OpenAPI 3 JSON 和 API,再把它传给 Knife4x:

go
package main

import (
	"log"
	"net/http"

	knife4x "github.com/songxychn/knife4j-next/knife4x/go"
)

func main() {
	app := http.NewServeMux()
	app.HandleFunc("/openapi.json", func(w http.ResponseWriter, _ *http.Request) {
		w.Header().Set("Content-Type", "application/json")
		_, _ = w.Write([]byte(`{
			"openapi":"3.0.3",
			"info":{"title":"Example API","version":"1.0.0"},
			"paths":{}
		}`))
	})

	handler, err := knife4x.NewHandler(knife4x.Config{
		SpecURL: "/openapi.json",
	}, app)
	if err != nil {
		log.Fatal(err)
	}

	log.Fatal(http.ListenAndServe(":8080", handler))
}

启动后访问 http://localhost:8080/doc.html。

配置 ​

字段要求说明
SpecURL必填已有 OpenAPI 3 文档 URL,可使用根相对、相对或完整 HTTP(S) URL
BasePath可选UI 挂载前缀;必须是以 / 开头的 clean absolute path,空值等同于 /

例如 BasePath: "/internal" 时,入口为 /internal/doc.html。生产环境不需要文档时, 不要创建或挂载 Knife4x Handler;Knife4x 不额外提供 enabled 开关。

相对 SpecURL: "openapi.json" 会在该前缀下解析为 /internal/openapi.json; 根相对 SpecURL: "/openapi.json" 仍指向根路径。Knife4x 不拥有的请求会交回传入的 业务 Handler。使用跨域的完整 URL 时,目标服务必须允许浏览器 CORS。

使用边界 ​

  • 已发布的 v0.8.6 消费已有的 OpenAPI 3.0.x / 3.1.x / 3.2.x JSON,不生成 spec,不支持 OAS2 / Swagger 2。
  • 同一 Handler 可经 SpecURL 承载合法 3.2 JSON;限制见 OpenAPI 3.2 支持矩阵。入口仍不接受 YAML。
  • 只提供 {BasePath}/doc.html 入口,不为 / 或 index.html 增加重定向或 SPA fallback。
  • Go 核心只依赖标准库 net/http;Gin 是可运行示例,不是库依赖。
  • Go Handler 将配置注入 UI,Knife4x 不请求 Java 的 /knife4j/config。
  • Go 使用独立 0.x 版本;Java 5.x 发布说明和 Maven 坐标不适用于 Knife4x。

更多资料 ​

让 OpenAPI 文档更清晰,让接口联调更顺手。