如何在FastAPI应用中禁用Redoc文档URL?覆盖端点无效该如何修复?
解决FastAPI生产环境禁用Redoc文档的问题
以下是几种可靠的解决方式,直接从FastAPI配置层面入手,彻底禁用Redoc:
1. 创建FastAPI实例时直接关闭Redoc
初始化应用时,通过redoc_url参数设为None,FastAPI就不会注册Redoc的路由:
from fastapi import FastAPI # 只禁用Redoc,保留Swagger文档(/docs) app = FastAPI(redoc_url=None) # 如果需要同时禁用Swagger和Redoc # app = FastAPI(docs_url=None, redoc_url=None)
2. 根据环境动态控制文档开关
通过环境变量判断运行环境,仅在生产环境禁用Redoc:
import os from fastapi import FastAPI env = os.getenv("ENVIRONMENT", "dev") app = FastAPI( redoc_url=None if env == "production" else "/redoc", # 可选:同时控制Swagger文档的显示 docs_url="/docs" if env != "production" else None )
启动服务时设置环境变量即可,比如Linux下:ENVIRONMENT=production uvicorn main:app --host 0.0.0.0 --port 8000
3. 已创建应用实例后动态修改
如果已经初始化了FastAPI实例,后续想在代码中动态禁用Redoc,直接修改实例的redoc_url属性:
import os # 假设app是已创建的FastAPI实例 if os.getenv("ENVIRONMENT") == "production": app.redoc_url = None
为什么之前覆盖端点没用?
你之前尝试覆盖Redoc端点的方式,只是在原有路由之上添加了新的路由处理,但FastAPI依然保留了默认的Redoc路由。只有通过设置redoc_url=None,才能让FastAPI不注册这个默认路由,从根源上禁用Redoc访问。
验证方式:设置完成后访问/redoc,应该返回404 Not Found,说明Redoc已被成功禁用。
内容的提问来源于stack exchange,提问作者Vishvajit Rao
相关产品推荐
相关产品推荐

