
swagger-ui-react 集成指南在 React 应用中嵌入 Swagger UI 文档组件【免费下载链接】swagger-uiSwagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.项目地址: https://gitcode.com/GitHub_Trending/sw/swagger-uiswagger-ui-react是 Swagger UI 官方为 React 生态定制的 npm 发行版flavor它把 Swagger UI 的初始化逻辑封装成一个 React 函数组件让你可以用声明式 JSX 的方式在 React 应用中渲染 OpenAPI/Swagger 接口文档。读完本文你将掌握该组件的安装与快速上手、全部 Props 的含义与取值、基于源码的组件工作机理以及它相对于主版本 Swagger UI 的差异、限制与发布机制。什么是 swagger-ui-reactSwagger UI 官方在 npm 上同时发布三个模块swagger-ui面向带模块打包器的 JS 工程、swagger-ui-dist面向服务端静态托管、swagger-ui-react面向 React 应用详见 安装文档。与主版本相比swagger-ui-react有两点核心差异依赖关系不同把react与react-dom声明为peerDependencies同伴依赖而不是生产依赖由宿主 React 项目统一提供这两个库避免版本重复打包导出形态不同导出的是一个 React 组件而非SwaggerUI({...})构造函数不再需要手动指定dom_id/domNode挂载点。此外该模块的版本号与发行版中内置的 Swagger UI 版本保持一致当前仓库根目录 package.json 中的版本为5.32.13方便你追溯其内部 Swagger UI 能力。快速开始安装与最小示例$ npm install swagger-ui-react在你的 React 应用中直接引入组件与样式import SwaggerUI from swagger-ui-react import swagger-ui-react/swagger-ui.css export default App () SwaggerUI urlhttps://petstore.swagger.io/v2/swagger.json /组件支持两种数据来源二选一切勿混用url远程 OpenAPI 文档地址组件会自动 fetch、解析并渲染spec以 JavaScript 对象、JSON 字符串或 YAML 字符串形式直接传入的 OpenAPI 文档。如果希望基于仓库内的示例文档本地测试也可以把 示例规格文件 之类的内容作为spec传入或通过打包器加载后传入。Props 全解析组件对外配置清单swagger-ui-react的 Props 与 Swagger UI 配置项 同名映射覆盖了从显示、网络到授权的大部分能力。以下按用途分组逐一说明。文档来源Prop类型说明specobject/string要展示的 OpenAPI 文档对象、JSON 或 YAML 字符串。⚠️ 不要与url同时使用否则可能产生不可预期的行为urlstring远程 OpenAPI 文档地址Swagger UI 会抓取、解析并展示。⚠️ 不要与spec同时使用initialStateobject向 Swagger UI 状态注入初始值底层system的状态初始化布局与显示Prop类型默认值说明layoutstringBaseLayout通过插件系统注册的顶层布局组件名称。⚠️ 仅在挂载时生效一次docExpansionlist \| full \| nonelist操作与标签的默认展开策略list只展开标签full同时展开标签与操作none全部收起。⚠️ 仅在挂载时生效defaultModelExpandDepthnumber1模型在模型/示例区域的默认展开深度设为-1可完全隐藏模型。⚠️ 仅在挂载时生效defaultModelRenderingexample \| modelexample模型首次渲染时的展示形态用户可随时通过 Model/Example Value 链接切换。⚠️ 仅在挂载时生效displayOperationIdboolfalse是否在操作列表中显示operationId。⚠️ 仅在挂载时生效showExtensionsboolfalse是否显示 Operation、Parameter、Response、Schema 的厂商扩展字段x-前缀。⚠️ 仅在挂载时生效showCommonExtensionsboolfalse是否显示 Parameter 的通用扩展字段pattern、maxLength、minLength、maximum、minimum。⚠️ 仅在挂载时生效filterbool \| stringfalse开启后顶栏出现过滤输入框可过滤显示的带标签操作。布尔值控制开关传字符串则启用过滤并把该字符串作为过滤表达式在标签内做大小写敏感的包含匹配。可参考 Plug Points 的fn.opsFilter自定义过滤行为displayRequestDurationboolfalse是否在 Try it out 请求中显示耗时毫秒交互能力Try it outProp类型默认值说明supportedSubmitMethods(get\|put\|post\|delete\|options\|head\|patch\|trace)[]全部方法启用 Try it out 的 HTTP 方法列表传空数组[]表示对所有操作禁用 Try it out不影响操作展示。⚠️ 仅在挂载时生效tryItOutEnabledboolfalse控制 Try it out 区域是否默认处于展开可试状态。⚠️ 仅在挂载时生效showMutatedRequestbooltrue为true时UI 中的 curl 命令基于requestInterceptor返回的变异后请求生成否则使用拦截前的原始请求。⚠️ 仅在挂载时生效requestSnippetsEnabledboolfalse启用请求代码片段request snippet区域关闭时退回传统的 curl 片段。⚠️ 仅在挂载时生效requestSnippetsobject见下方配置 request snippet 核心插件完整结构参见 配置文档 Display 章节requestSnippets的默认结构摘自 配置文档{ generators: { curl_bash: { title: cURL (bash), syntax: bash }, curl_powershell: { title: cURL (PowerShell), syntax: powershell }, curl_cmd: { title: cURL (CMD), syntax: bash } }, defaultExpanded: true, languages: null // 例如只想保留 curl bash[curl_bash] }网络与请求Prop类型默认值说明requestInterceptorfunc—req req或req Promisereq。拦截远端文档、Try it out 与 OAuth 2.0 请求接收请求对象返回修改后的请求或其 PromiseresponseInterceptorfunc—res res或res Promiseres。拦截上述请求的响应接收响应对象返回修改后的响应或其 PromisewithCredentialsboolfalse为true时在浏览器发起的 CORS 请求中携带凭据Fetch 标准的 credentials。注意 Swagger UI 目前无法跨域设置 Cookie需要依赖浏览器自带 Cookie该开关即用于允许发送这些 Cookie。⚠️ 仅在挂载时生效persistAuthorizationboolfalse为true时将授权数据持久化浏览器关闭/刷新后不丢失。⚠️ 仅在挂载时生效oauth2RedirectUrlstring与 Swagger UI 同路径的oauth2-redirect.html传给 OAuth 2.0 提供方的重定向地址。⚠️ 仅在挂载时生效生命周期与扩展Prop类型说明onCompletefunc(system) void。Swagger UI 完成一份 OpenAPI 文档渲染后触发参数是底层system对象pluginsobject[]增强/修改 Swagger UI 功能的插件对象数组详见 Plugin API。⚠️ 仅在挂载时生效presetsfunc[]增强/修改 Swagger UI 功能的预设函数数组详见 Plugin API。⚠️ 仅在挂载时生效uncaughtExceptionHandlerfunc自定义未捕获异常处理器默认null时使用默认处理器把错误打印到控制台。⚠️ 仅在挂载时生效Props 与配置默认值的对应关系组件源码在 flavors/swagger-ui-react/index.jsx 中为每个 Props 提供了来自SwaggerUIConstructor.config.defaults的默认值spec、url、layout、docExpansion、supportedSubmitMethods、deepLinking、filter等未显式传入的 Props 不会覆盖底层默认行为。除 README 列出的 Props 外源码还透传了defaultModelsExpandDepth、queryConfigEnabled、deepLinking等配置项说明组件实际可接受的入参比文档清单更宽泛——文档列出的仅是经过声明与校验propTypes的核心子集。深入理解组件是如何工作的swagger-ui-react的实现非常精简核心逻辑集中在 index.jsx约 180 行。理解它有助于你预判行为边界挂载即初始化组件在挂载时useEffect空依赖数组调用一次SwaggerUIConstructor({...})创建完整的 Swagger UI 系统实例并把实例存入 React state随后渲染system.getComponent(App, root)得到的顶层组件presets 固定拼接构造时固定以[SwaggerUIConstructor.presets.apis, ...presets]的方式前置注入apis预设因此传入的presets是在官方 API 预设之上的增量onComplete 透传内部onComplete回调会把systemInstance作为参数转发给你传入的onComplete让你在渲染完成后访问底层系统spec / url 的响应式更新组件用usePrevious记录上一次的 Props当url变化时调用specActions.updateSpec()、updateUrl(url)、download(url)重新拉取当spec变化时对象类型会被JSON.stringify后经specActions.updateSpec(...)注入——这正是spec支持对象、JSON 字符串、YAML 字符串三种形态的底层原因静态导出组件在SwaggerUI上挂载了System、presets、plugins、config四个静态属性便于需要时直接访问底层构造器能力。文件首行的use client指令表明组件声明为客户端组件可安全用于 React Server Components 架构的项目中。插件与预设在 React 组件里做自定义与主版本一样swagger-ui-react通过plugins与presets暴露了完整的自定义入口import SwaggerUI from swagger-ui-react import swagger-ui-react/swagger-ui.css const myPlugin { wrapComponents: { // 包装/替换某个组件 } } export default () ( SwaggerUI urlhttps://petstore.swagger.io/v2/swagger.json plugins{[myPlugin]} onComplete{(system) { // system.specSelectors / system.specActions 等均可使用 }} / )插件体系state、actions、selectors、wrapComponents、rootInjects 等的完整机制见 插件 API 文档组件化布局的自定义见 自定义布局。借助onComplete拿到的system你还能调用preauthorizeBasic、preauthorizeApiKey等实例方法做程序化预授权这些方法在 配置文档 的 Instance methods 一节有完整说明。版本、发布与匿名统计版本对齐与发布管线swagger-ui-react的版本号与其内置的 Swagger UI 版本严格对齐当前仓库5.32.13。发布过程由 release/run.sh 驱动从仓库根目录dist/拷贝swagger-ui-es-bundle-core.js、swagger-ui.js、swagger-ui-bundle.js、swagger-ui-es-bundle.js、swagger-ui.css及对应 sourcemap 到flavors/swagger-ui-react/dist/由 create-manifest.js 用json-merger合并根 package.json 与 template.json 生成发布清单支持通过环境变量REACT_FLAVOR_VERSION_IDENTIFIER覆盖版本号用 Babel 把 index.jsx 分别转译为 CJSindex.cjs与 ESMindex.mjs拷贝 README、LICENSE、NOTICE 后npm publish或npm pack本地打包。从 template.json 可以看到发布清单的关键设计react/react-dom被从dependencies中移除并声明为peerDependencies范围16.8.0 20与 Hooks 最低版本要求一致main指向index.cjs、module指向index.mjs并通过imports字段把#swagger-ui分别映射到浏览器/Node 环境对应的 bundle。安装期匿名统计与退出与主包一致swagger-ui-react使用 Scarf 在安装期间收集匿名的安装统计信息用于支持库的维护工作这些统计仅在npm install时运行不会在运行时收集数据。提供两种退出方式方式一在项目package.json中设置{ // ... scarfSettings: { enabled: false } // ... }方式二通过环境变量关闭SCARF_ANALYTICSfalse npm install已知限制与注意事项根据官方 README即本文所依据的 flavors/swagger-ui-react/README.md当前版本存在以下限制并非所有配置项都有对应绑定文档列出的仅是映射到核心配置的子集部分 Swagger UI 配置无法通过 Props 传入部分 Props 仅在挂载时生效一次如layout、docExpansion、defaultModelExpandDepth、defaultModelRendering、displayOperationId、plugins、supportedSubmitMethods、showExtensions、showCommonExtensions、showMutatedRequest、presets、tryItOutEnabled、requestSnippetsEnabled、requestSnippets、persistAuthorization、withCredentials、oauth2RedirectUrl、initialState、uncaughtExceptionHandler等运行期修改这些 Props 不会被传播到底层实例未来版本将移除该限制且不视为破坏性变更相对地spec、url是响应式的变化会触发重新加载不支持 OAuth 重定向处理oauth2RedirectUrl只能作为配置传给提供方组件本身不接管 OAuth 回调流程不支持 Topbar/Standalone 模式因此urls、StandaloneLayout等依赖 Topbar 插件的功能不可用。另外需要注意flavors/swagger-ui-react/目录下的package.json并非用于发布的清单——真正的发布清单在构建时生成于./dist/见 release/run.sh 的node create-manifest.js ../dist/package.json源码目录内的清单仅服务于开发场景。如果上述限制影响了你的使用场景官方建议在仓库提交 Issue 或 Pull Request 提出具体需求以便按用户需求逐步完善。总结swagger-ui-react以极薄的组件封装把 Swagger UI 完整的文档渲染、Try it out、鉴权、插件化自定义能力带进了 React 世界安装一条命令、接入一行 JSX、配置全走 Props同时保留了system级别的底层访问onComplete与静态 APISystem/presets/plugins/config。把握住大多数 Props 仅挂载时生效、spec/url 响应式、无 OAuth 回调与 Topbar这三条边界你就能在 React 项目中稳定地嵌入一套可维护、可定制的 API 文档界面。【免费下载链接】swagger-uiSwagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.项目地址: https://gitcode.com/GitHub_Trending/sw/swagger-ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考