生成的 API 文档#
生成的 API 文档#
Huma 使用 OpenAPI 规范通过第三方工具生成交互式 API 文档。默认情况下,使用 Stoplight Elements 在 API 的 config.DocsPath(默认为 /docs)渲染文档。

禁用文档
您可以通过将 config.DocsPath 设置为空字符串来禁用内置文档。
自定义文档#
您可以通过向 API 适配器提供自己的渲染函数或直接使用底层路由器来自定义生成的文档。
Stoplight Elements#
您可以通过提供自己的 HTML 来自定义默认文档,从而根据需要设置布局、样式、颜色等。
code.go
router := chi.NewRouter()
config := huma.DefaultConfig("Docs Example", "1.0.0")
config.DocsPath = ""
api := humachi.New(router, config)
router.Get("/docs", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
w.Write([]byte(`<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="referrer" content="same-origin" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<title>Docs Example reference</title>
<!-- Embed elements Elements via Web Component -->
<link href="https://unpkg.com/@stoplight/elements@8.0.0/styles.min.css" rel="stylesheet" />
<script src="https://unpkg.com/@stoplight/elements@8.0.0/web-components.min.js"
integrity="sha256-yIhuSFMJJ6mp2XTUAb4SiSYneP3Qav8Uu+7NBhGJW5A="
crossorigin="anonymous"></script>
</head>
<body style="height: 100vh;">
<elements-api
apiDescriptionUrl="/openapi.yaml"
router="hash"
layout="stacked"
tryItCredentialsPolicy="same-origin"
/>
</body>
</html>`))
})

Scalar Docs#
Scalar Docs 提供了一个功能丰富且可自定义的 API 文档体验,在浏览器中感觉类似于 Postman。
code.go
router := chi.NewRouter()
config := huma.DefaultConfig("Docs Example", "1.0.0")
config.DocsPath = ""
api := humachi.New(router, config)
router.Get("/docs", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
w.Write([]byte(`<!doctype html>
<html>
<head>
<title>API Reference</title>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1" />
</head>
<body>
<script
id="api-reference"
data-url="/openapi.json"></script>
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
</body>
</html>`))
})

SwaggerUI#
SwaggerUI 是一个较旧但经过验证的文档生成器,在行业中被广泛使用。它提供了一种更传统的 API 文档体验。
code.go
router := chi.NewRouter()
config := huma.DefaultConfig("Docs Example", "1.0.0")
config.DocsPath = ""
api := humachi.New(router, config)
router.Get("/docs", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
w.Write([]byte(`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="SwaggerUI" />
<title>SwaggerUI</title>
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui.css" />
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui-bundle.js" crossorigin></script>
<script>
window.onload = () => {
window.ui = SwaggerUIBundle({
url: '/openapi.json',
dom_id: '#swagger-ui',
});
};
</script>
</body>
</html>`))
})

深入了解#
- 参考
huma.ConfigAPI 配置huma.DefaultConfig默认 API 配置