言简意赅的讲解ReDoc解决的痛点
ReDoc 是一个开源的工具,用于将 OpenAPI/Swagger 规范转换为用户友好的 API 文档。相较于传统的 Swagger UI,ReDoc 提供了更专业的外观、更灵活的定制能力,以及更出色的性能,尤其适合大规模 API 文档的展示。
本文将全面讲解如何使用 ReDoc,包括如何书写支持 ReDoc 的 API 文档注解、如何配置 HTML 文件,最后扩展 ReDoc 的更多用法,以帮助开发者更高效地展示 API 文档。
为什么选择 ReDoc?
ReDoc 是基于 OpenAPI 规范的静态文档生成工具,以下是其核心特点:
- 性能卓越:即使是大型 API 文档,也能快速渲染。
- 响应式设计:在桌面和移动设备上都能很好地适配。
- 多功能导航:支持嵌套菜单、动态搜索,帮助用户快速找到需要的信息。
- 灵活的自定义:支持多种样式和主题设置,轻松适配品牌需求。
使用 ReDoc 构建 API 文档
准备 HTML 页面
下面是一个简单的 HTML 页面,用于展示 ReDoc 的使用方法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ReDoc 示例</title>
<!-- 引入 ReDoc 库 -->
<script src="https://cdn.jsdelivr.net/npm/redoc/bundles/redoc.standalone.js"></script>
</head>
<body>
<!-- 创建一个容器,其中 ReDoc 将渲染文档,这个就是swagger的url -->
<redoc spec-url="https://example.com/api-docs"></redoc>
<script>
// 使用 JavaScript 初始化 ReDoc
Redoc.init('https://example.com/api-docs', {
scrollYOffset: 50, // 设置滚动偏移量
theme: {
colors: {
primary: {
main: '#ff6f61' // 主颜色
},
text: {
primary: '#333333', // 文字颜色
}
},
typography: {
fontSize: '16px', // 文本字体大小
fontFamily: 'Arial, sans-serif', // 文本字体
}
}
});
</script>
</body>
</html>
代码讲解
- ReDoc 库加载:通过
<script>
标签从 CDN 加载 ReDoc。 <redoc>
标签:指定spec-url
属性为 OpenAPI 文档的 URL,ReDoc 会自动解析并渲染文档。- 自定义配置:
scrollYOffset
用于调整页面滚动的偏移量。theme
参数可以自定义文档的颜色和字体样式。
示例:运行环境的配置
将上述代码保存为 index.html
,并通过任何静态文件服务器(如 nginx
或 http-server
)加载即可。以下是一个简单的本地运行命令:
npx http-server -p 8080
在浏览器中访问 http://localhost:8080/index.html
,即可看到渲染好的 API 文档。
编写支持 OpenAPI 的 API 文档
为了让 ReDoc 正确解析 API 文档,我们需要在后端代码中按照 OpenAPI 规范编写注解。例如,以下是一个 Spring Boot 项目的控制器代码示例:
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.ApiResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(value = "Home Controller", description = "提供首页相关的接口")
@RestController
public class HomeController {
@ApiOperation(
value = "获取首页",
notes = "返回首页的 HTML 页面。\n\n响应细节未详细说明,因为响应内容为 HTML 页面。"
)
@GetMapping("/home")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "请求成功"),
@ApiResponse(code = 500, message = "服务器内部错误")
})
public String home() {
return "<h1>欢迎来到首页</h1>";
}
}
说明
@Api
:描述控制器的用途。@ApiOperation
:提供接口的功能描述和用途说明。@ApiResponses
:定义接口可能返回的状态码及其含义。@GetMapping
:指定接口的 HTTP 方法和路径。
更多注解示例
针对复杂接口,可以进一步扩展:
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
@Api(value = "用户管理", description = "提供用户的增删改查接口")
@RestController
@RequestMapping("/users")
public class UserController {
@ApiOperation(value = "获取用户信息", notes = "根据用户 ID 获取用户详情")
@GetMapping("/{id}")
public String getUser(
@ApiParam(value = "用户 ID", required = true) @PathVariable Long id) {
return "用户 ID: " + id;
}
@ApiOperation(value = "创建新用户", notes = "创建一个新的用户")
@PostMapping
public String createUser(
@ApiParam(value = "用户名", required = true) @RequestParam String name,
@ApiParam(value = "用户年龄", required = true) @RequestParam int age) {
return "创建成功: " + name + ", 年龄: " + age;
}
}
ReDoc 高级配置
ReDoc 提供了多种配置选项,以满足不同场景的需求。
配置文件方式加载
除了直接在 HTML 中指定 spec-url
,还可以通过 JavaScript 动态加载:
fetch('https://example.com/api-docs')
.then(response => response.json())
.then(spec => {
Redoc.init(spec, {
hideDownloadButton: true, // 隐藏下载按钮
expandResponses: '200', // 默认展开所有 200 响应
theme: {
colors: {
primary: {
main: '#007BFF'
}
}
}
});
});
自定义主题
以下是一些常见的主题自定义选项:
- 隐藏某些文档部分:
Redoc.init('https://example.com/api-docs', {
hideHostname: true, // 隐藏主机名
hideInfoSection: true // 隐藏文档信息部分
});
- 设置文档加载时的默认行为:
Redoc.init('https://example.com/api-docs', {
expandResponses: 'all', // 默认展开所有响应
requiredPropsFirst: true, // 在参数列表中优先显示必填字段
});
常见问题与解决方案
- 文档加载缓慢:如果文档较大,可以通过优化 OpenAPI 文件结构(如移除冗余字段)提升加载速度。
- 跨域问题:确保 API 文档的服务器支持 CORS(跨域资源共享),否则前端无法加载文档。
- 样式不符合预期:通过
theme
选项调整配色和排版,或者直接覆盖 ReDoc 的 CSS 样式。
总结
ReDoc 是展示 OpenAPI 文档的强大工具,它不仅美观,而且性能优异。通过本文的讲解,相信你已经学会了如何使用 ReDoc 构建自己的 API 文档,并理解了如何通过注解编写高质量的 API 定义。
通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强
Best
Wenhao (楠博万)