如何从 Swagger UI 迁移到 Scalar API Reference 并映射常见配置项
如果你的站点目前用 Swagger UI 渲染 OpenAPI 文档,想换成 Scalar 的 API Reference,同时保留现有 OpenAPI 文档不动,本文给出完整的替换步骤和配置项映射。迁移的前提只有一条:你已经有一个符合 Swagger 2.0、OpenAPI 3.0 或 OpenAPI 3.1 规范的文档(JSON 或 YAML),以及一个当前加载 swagger-ui-bundle.js 的页面。按 Swagger UI 迁移指南的说法,大多数情况下只需几分钟即可完成替换,OpenAPI 文档本身不需要修改。
替换页面代码
以迁移文档中给出的最小示例为对照。Swagger UI 侧的典型加载方式是:
<!doctype html>
<html>
<head>
<title>Swagger UI</title>
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist/swagger-ui.css" />
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist/swagger-ui-bundle.js"></script>
<script>
SwaggerUIBundle({
url: '/openapi.json',
dom_id: '#swagger-ui',
})
</script>
</body>
</html>
对应的 Scalar API Reference 版本,来自同一份迁移文档:
<!doctype html>
<html>
<head>
<title>API Reference</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<div id="app"></div>
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
<script>
Scalar.createApiReference('#app', {
url: '/openapi.json',
})
</script>
</body>
</html>
替换时注意三点:
- 容器
div的 id 可以自行选择,它会作为Scalar.createApiReference()的第一个参数传入,对应 Swagger UI 的dom_id。 url的值直接沿用你现有文档的地址(示例中是/openapi.json)。- 如果你的文档和页面不在同一个源,浏览器会受 CORS 限制。文档给出的解决办法是配置
proxyUrl,例如官方托管代理:
Scalar.createApiReference('#app', {
url: 'https://registry.scalar.com/@scalar/apis/galaxy?format=json',
// Avoid CORS issues
proxyUrl: 'https://proxy.scalar.com',
})
需要注意,自建的代理不能是任意反向代理,必须遵循 Scalar Proxy API,文档提供了一个 Go 语言实现的示例代理。
映射 Swagger UI 常见配置项
迁移文档 documentation/migration/swagger-ui.md 给出了官方配置映射表,逐项对应如下(url、spec、urls、dom_id 四项之外,其余都传入 createApiReference() 的第二个参数对象):
| Swagger UI | Scalar |
|---|---|
url |
url |
spec |
content |
urls |
sources |
dom_id |
createApiReference() 的第一个参数 |
deepLinking |
默认开启 |
displayOperationId |
showOperationId: true |
defaultModelsExpandDepth: -1 |
hideModels: true |
defaultModelExpandDepth |
expandAllModelSections: true |
docExpansion: 'none' |
defaultOpenAllTags: false(即默认值) |
docExpansion: 'list' |
defaultOpenAllTags: false(即默认值) |
docExpansion: 'full' |
defaultOpenAllTags: true |
filter |
搜索默认开启 |
filter: false |
hideSearch: true |
tryItOutEnabled |
默认开启 |
supportedSubmitMethods: [] |
hideTestRequestButton: true |
operationsSorter: 'alpha' |
operationsSorter: 'alpha' |
operationsSorter: 'method' |
operationsSorter: 'method' |
tagsSorter: 'alpha' |
tagsSorter: 'alpha' |
persistAuthorization |
persistAuth: true |
映射表中几个有默认行为差异的项,在 配置文档中的说明如下:
showOperationId默认false,而 Swagger UI 里displayOperationId默认也是关闭的,行为一致,无需改动。hideModels控制components.schemas(或 Swagger 2.0 的definitions)是否出现在侧边栏、搜索和内容中,默认false。hideTestRequestButton设为true时,认证面板也会一并隐藏,因为它只在 Test Request 可用时才有意义。persistAuth默认false,即认证凭证不写入 local storage。文档对此有安全警告:在浏览器 local storage 中持久化认证信息在部分环境存在风险,需要按自身安全要求决定。
组合起来的完整示例(仅示意,取映射表中的几项):
Scalar.createApiReference('#app', {
url: '/openapi.json',
showOperationId: true,
expandAllModelSections: true,
defaultOpenAllTags: true,
operationsSorter: 'method',
persistAuth: true,
})
保持 Swagger 风格布局与主题
如果你希望迁移后视觉变化尽量小,Scalar 提供了 classic 布局,文档明确说明它"与传统的 Swagger UI 布局没有太大差别":
Scalar.createApiReference('#app', {
url: '/openapi.json',
layout: 'classic',
})
layout 可选 'modern'(默认)或 'classic'。内置主题包括 default、alternate、moon、purple、solarized、bluePlanet、saturn、kepler、mars、deepSpace、laserwave(配置文档中还列出了 none),通过 theme 字段设置:
Scalar.createApiReference('#app', {
url: '/openapi.json',
theme: 'moon',
})
迁移文档同时给出了用 CSS 变量覆盖品牌样式的写法:
<style>
:root {
--scalar-font: 'Your Font', sans-serif;
--scalar-color-accent: #0a85d1;
}
.dark-mode {
--scalar-background-1: #1a1a1a;
--scalar-color-1: rgba(255, 255, 255, 0.9);
}
.light-mode {
--scalar-background-1: #ffffff;
--scalar-color-1: #121212;
}
</style>
版本兼容范围
迁移前确认你的 OpenAPI 文档版本在支持范围内。Scalar 接受 Swagger 2.0、OpenAPI 3.0 和 OpenAPI 3.1 文档(见 OpenAPI 规范说明)。迁移文档的功能对比表给出的支持状态是:
| 规范版本 | Scalar 状态 |
|---|---|
| OpenAPI 3.0 / 3.1 / Swagger 2.0 | 支持 |
| OpenAPI 3.1.2 | 支持 |
| OpenAPI 3.2 | in progress(尚未完成) |
也就是说,文档本身是 Swagger 2.0 或 OpenAPI 3.x 时迁移没有障碍;如果你的文档是 OpenAPI 3.2,需要留意它目前还在适配中。此外,Swagger 2.0 文档的 x-example / x-examples 扩展在 body 参数上同样被支持,这部分功能迁移后不会丢失。
验证迁移结果
替换代码并重新打开文档页后,可以按文档描述的行为逐项确认:
- 页面渲染出 API Reference 界面,端点、schemas 正常显示(
url指向的文档无需任何修改)。 - 搜索栏可用——Scalar 的搜索是内置的,不需要 Swagger UI 里那种搜索插件;若想关掉它,用
hideSearch: true。 - 认证后刷新页面:若设置了
persistAuth: true,认证状态应保留;默认情况下刷新会丢失,这是预期行为而非缺陷。 - 若页面原来开启了
deepLinking,无需额外配置,Scalar 默认启用。 - 如果之前用
tryItOutEnabled控制过测试请求,现在想只读展示,设置hideTestRequestButton: true后 Test Request 按钮和认证面板都应消失。
框架集成与边界
如果你的站点不是纯 HTML 页面,而是运行在某个框架里,文档提供了各框架的集成方案(React、Vue、Nuxt、Next.js、Express、Fastify 等),入口在 Getting Started,替换时可按对应框架的集成方式传入同样的配置项。
有几点边界要清楚:
deepLinking、tryItOutEnabled、filter这几项在 Scalar 中没有对应开关,而是默认行为,迁移后删除即可,不需要寻找等价配置。proxyUrl、baseServerURL、pathRouting、hiddenClients等属于 Scalar 的扩展能力,Swagger UI 侧没有对应项,属于可选增强而非迁移必需,按需参考 配置文档。- 配置文档中
onBeforeRequest建议通过变更requestBuilder来实现请求修改,迁移文档的扩展特性表里有指向其章节的说明,涉及请求拦截逻辑时以配置文档为准。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust4.24 K638- DDeepSeek-V4.1-FlashDeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本Python670
SlideSCIPPT插件,支持素材库、AI助手、一键添加图片标题,复制粘贴位置、一键图片对齐、一键插入Markdown(加粗、超链接等行内样式、代码块、LaTeX等块级样式)、便捷导出图片!C#230
hello-agents📚 《从零开始构建智能体》——从零开始的智能体原理与实践教程Python52874
new-apiAI模型聚合管理中转分发系统,一个应用管理您的所有AI模型,支持将多种大模型转为统一格式调用,支持OpenAI、Claude、Gemini等格式,可供个人或者企业内部管理与分发渠道使用。🍥 A Unified AI Model Management & Distribution System. Aggregate all your LLMs into one app and access them via an OpenAI-compatible API, with native support for Claude (Messages) and Gemini formats.Go22545
JeecgBoot🔥企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领AI低代码开发模式: AI生成->OnlineCoding-> 代码生成-> 手工MERGE,显著的提高效率,又不失灵活~Java36351