API接口文档页面有时候打开会很慢,因为它默认使用的是https://cdn.jsdelivr.net/npm (注:若能无障碍地访问广域网,比如能正常访问Google搜索,则不存在该问题)
为加快/docs页面的打开速度,常常需要放置N行代码来自定义文档的响应路由。
由于很多个项目都需要这么操作,故开发了一个插件了简化代码,现只需import和patch_docs
即可:
import fastapi_cdn_host
fastapi_cdn_host.patch_docs(app)
English | 中文
pip install fastapi-cdn-host
- 国内访问fastapi接口文档页面的默认CDN(https://cdn.jsdelivr.net)会比较慢,使用插件后会自动对比它跟unpkg.com/cdnjs.cloudflare.com等其他开源cdn的速度,然后采用响应快的那个
- 如果是离线环境,这时候外部CDN是访问不了的,只需在同级目录下的static里放置swagger-ui-bundle.js和swagger-ui.css就会自动挂载它们。(注:在有网的环境下,执行
fastcdn offline
即可下载这些静态资源)
import fastapi_cdn_host
from fastapi import FastAPI
app = FastAPI()
# 注册路由、挂载静态文件等 ...
fastapi_cdn_host.patch_docs(app)
更多示例见:
- examples/
- tests/
使用fastapi_cdn_host.patch_docs(app)
启用插件后,uvicorn(或gunicorn等)启动服务时,
会先查找本地文件夹里是否有swagger-ui.css,有的话自动挂载到app并改写/docs的依赖为本地文件。
没有的话,使用协程并发对比https://cdn.jsdelivr.net、https://unpkg.com、https://cdnjs.cloudflare.com、https://cdn.staticfile.org
等几个CDN的响应速度,然后自动采用速度最快的那个。
from fastapi_cdn_host import CdnHostEnum, CdnHostItem
fastapi_cdn_host.patch_docs(
app,
docs_cdn_host=CdnHostEnum.extend(
('https://cdn.waketzheng.top/ajax/libs', ('/swagger-ui/{version}/', '')),
CdnHostItem('https://raw.githubusercontent.com/swagger-api/swagger-ui/v5.14.0/dist/swagger-ui.css'), # github
)
)
fastcdn main.py
fastcdn offline