You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在drf_spectacular SERVERS配置中排除DRF路由/api前缀

drf-spectacular 全局API前缀处理最佳实践

不需要修改项目原有路由规则,也不需要手写脆弱的字符串截断预处理钩子,drf-spectacular 原生提供了专门的配置项实现「公共前缀放到OpenAPI servers 字段、端点路径不重复展示前缀」的需求,完全符合OpenAPI规范。

标准配置实现

直接修改项目的SPECTACULAR_SETTINGS配置即可:

SPECTACULAR_SETTINGS = {
    # OpenAPI服务根地址配置,后续新增多环境、多版本服务直接追加到列表即可
    'SERVERS': [
        {'url': 'https://example.com/api', 'description': '当前迭代生产环境'},
        # 后续可直接扩展多服务地址,例如:
        # {'url': 'https://api.example.com/v1', 'description': 'v1正式版本'},
        # {'url': 'http://127.0.0.1:8000/api', 'description': '本地开发环境'},
    ],
    # 声明需要统一裁剪的全局路由公共前缀
    'SCHEMA_PATH_PREFIX': r'/api',
    # 开启前缀自动裁剪:将所有端点路径中匹配到的公共前缀移除,请求时自动拼接在SERVERS地址之后
    'SCHEMA_PATH_PREFIX_TRIM': True,
    # 保留原有其他配置项...
}

之前配置出现路径重复的原因

仅配置SERVERS参数时,drf-spectacular 会默认将从Django路由表中读取到的全量路径(自带/api前缀)直接拼接到配置的server地址后,最终就会出现https://example.com/api/api/assets/这类重复路径,同时端点列表也会保留冗余的/api前缀。

原生配置方案的优势

对比手写预处理钩子的实现,原生方案不存在脆弱的硬编码截断逻辑:

  • 支持正则匹配前缀,后续如果公共前缀调整为/api/v1这类带版本的格式,仅需修改SCHEMA_PATH_PREFIX的正则规则即可,无需额外维护钩子代码
  • 自动适配Swagger UI、Redoc等所有内置文档UI的路径拼接逻辑,接口测试请求不会出现地址错误
  • 生成的OpenAPI schema完全符合规范:公共根路径统一在servers字段声明,每个端点仅保留自身相对路径,展示整洁无冗余
  • 不会误截断非API路由的路径,配合路径排除规则可以精准控制schema生成范围

内容的提问来源于stack exchange,提问作者gmcc051

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:06:43