【问题标题】:How to make DRF's AutoSchema include a base url?如何使 DRF 的 AutoSchema 包含基本 url?
【发布时间】:2020-12-18 01:16:59
【问题描述】:

我正在尝试使用 DRF 的 Open API AutoSchema + Swagger UI 来实现 API 文档。

我想要做的是指定一个基本 url,以便架构和招摇只显示资源(端点)。

在我的项目 urlpatterns 我有:

path('api/', include('api.urls')),
path('openapi/', get_schema_view(
    title="Diakonia API",
    description="API for food bank Diakonia",
    version="1.0.0",
    urlconf='api.urls',
), name='openapi-schema'),
path('swagger-ui/', TemplateView.as_view(
    template_name='swagger-ui.html',
    extra_context={'schema_url': 'openapi-schema'}
), name='swagger-ui')

这是我的架构的样子:

这就是它的显示方式:

但是,当我“试一试”时,它给了我一个错误,因为它试图将请求发送到:localhost:8080/institutions,而它应该是 localhost:8080/api/institutions

如果我像这样在 get_schema_view() 中添加 url 属性:url='/api/' 然后它可以工作,但是,端点显示api,这是基本 url 的一部分,而不是资源:

【问题讨论】:

  • 我不认为 api 是基本 url 意味着它不会在 url 路径中显示它。所以第二个版本实际上看起来应该是这样的
  • 但是我所有的资源都在/api/下,所以,第二个版本太冗余了。如果我的 api 被版本化了怎么办?然后我对每个端点都有 /api/v1/ ,这使得它的可读性降低。

标签: django-rest-framework swagger-ui openapi


【解决方案1】:

我推荐使用drf-spectacular

安装并配置应用后,您可以使用设置变量来满足您的需求:

SPECTACULAR_SETTINGS = {
# ... your other settings
'SCHEMA_PATH_PREFIX': '/api/',
}

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多