Skip to content

Latest commit

 

History

History
75 lines (54 loc) · 2.61 KB

README.zh.md

File metadata and controls

75 lines (54 loc) · 2.61 KB

FastAPI CDN host for docs ui

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

使用

  1. 国内访问fastapi接口文档页面的默认CDN(https://cdn.jsdelivr.net)会比较慢,使用插件后会自动对比它跟unpkg.com/cdnjs.cloudflare.com等其他开源cdn的速度,然后采用响应快的那个
  2. 如果是离线环境,这时候外部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的响应速度,然后自动采用速度最快的那个。

加入其他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
    )
)

不修改源代码只是启动时加载插件的方式(需要fastapi>=0.111.0):

fastcdn main.py

手动将js/css/redoc等文件下载到当前目录的static文件夹里

fastcdn offline

许可证

MIT