在使用API可视化交互式文档的过程中,有时候相关网络是正常的,但是依然无法正常加载可视化API文档界面,这主要是由swagger_ui内置的HTML模板导致的,相关的swagger-ui.css和swagger-ui-bundle.js资源是从第三方的CDN服务商上加载的,第三方的CDN服务出现问题就会导致无法正常加载可视化API文档界面的情况。为了避免出现这种情况,以及在无网络情况下也能正常访问API交互式文档,就需要自定义(或改造)并渲染HTML模板中的一些变量,让swagger-ui.css和swagger-ui-bundle.js等静态资源从本地进行加载。
通过查阅源码可以知道,docs模板内容渲染的HTML内容位于...\FastAPI\openapi\docs.py模块中,里面有get_swagger_ui_html()方法文档,其中有HTML输出模板的内容。用户可以通过替换对应输出模板的参数实现本地资源加载,具体替换步骤如下。
步骤1 查看可以替换的参数信息内容,如图3-9所示。
图3-9 swagger_ui中HTML模板的可替换参数信息内容
通过图3-9所示的函数传递的参数值可以看出,默认的swagger_js_url和swagger_css_url使用了第三方CDN地址,所以可以从这里入手进行改造。
步骤2 下载swagger_js_url和swagger_css_url对应的资源文件,然后将它们放到static文件夹之下。
步骤3 挂载相关静态资源文件,设置读取路径并自定义访问docs路由,代码如下:
步骤4 启动服务,然后查看浏览器请求信息(打开浏览器,按下F12键),此时会发现swagger_js_url和swagger_css_url已经默认从本地加载了,如图3-10所示。
图3-10 swagger_js_url和swagger_css_url从本地加载界面
读者可以按上述步骤配置redoc模式下的静态资源。
本节示例代码位于\fastapi_tutorial\chapter03\localswagger目录下。