gpt4 book ai didi

django - drf-yasg 提供了错误的 URI 路径

转载 作者:行者123 更新时间:2023-12-03 14:32:50 27 4
gpt4 key购买 nike

在我的应用程序中,我需要有多个 Swagger 页面,其中包含多个客户端的分组端点。

我的一个客户端(路径)提供移动应用程序 API,另一个提供 Web 客户端 API。 URL 模式保存在 2 种不同的 urls.py因此。

我正在使用 drf-yasg为我的 API 生成架构。

生成 swagger我正在初始化 2 个单独的规范 schema_views每个urls.py像这样的文件:

from api_mobile.urls import urlpatterns as mobile_patterns
from api_web.urls import urlpatterns as web_patterns

mobile_schema_view = get_schema_view(
openapi.Info(
title="Mobile API",
default_version='v3',
),
public=True,
permission_classes=(permissions.AllowAny,),
patterns=mobile_patterns,
)

web_schema_view = get_schema_view(
openapi.Info(
title="Web API",
default_version='v1',
),
public=True,
permission_classes=(permissions.AllowAny,),
patterns=web_patterns,
)

urlpatterns = [
path(
'api/mobile/docs',
mobile_schema_view.with_ui('swagger', cache_timeout=0),
name='mobile-schema-ui'
),
path(
'api/web/docs',
web_schema_view.with_ui('swagger', cache_timeout=0),
name='web-schema-ui'
),

path('api/mobile/v3/', include('api_mobile.urls'), name='mobile_urls'),
path('api/web/v1/', include('api_web.urls'), name='web_urls'),
...
]

哪里 mobile_patternsweb_patterns只是一个 url 模式列表。

如果我打开 http://localhost:8000/api/mobile/docshttp://localhost:8000/api/web/docs我确实看到了两个模式列表正确生成的模式,但是如果我尝试直接从 swagger 发出请求规范页面所有端点返回 404错误 - 他们都尝试向不存在的 url 模式发出请求,而没有提供到端点的完整路径。

因此,如果我请求来自 mobile 的任何 View 端点 swagger 尝试在
http://localhost:8000/some_mobile_url/而不是 http://localhost:8000/api/mobile/v3/some_mobile_url/
另一个模式的情况是一样的,swagger错误地请求 http://localhost:8000/some_web_url/而不是使用完整路径 http://localhost:8000/api/web/v3/some_web_url/
显然可以通过 swagger直接测试API非常重要,因此在我的情况下,规范本身是不够的。

这是我配置错误的问题 swagger itlesf 或者我应该以某种方式提供通往 swagger 的路径所以它相应地预先添加到每个 url 的完整路径?

最佳答案

这对我们来说很好用:

api_schema.py

from django.conf.urls import include, url
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

from books.api.v1.urls import urlpatterns as api_v1


API_DESCRIPTION = openapi.Info(
...
)

schema_view = get_schema_view(
info=...,
...
url='https://oursite.company.io/',
patterns=[
url('api/v1/', include(api_v1)),
],
)

book.api.v1.urls.py

from django.conf.urls import include, url

urlpatterns = [
url(r'^books', ...),
...
]

urls.py

from ...api_schema import schema_view

...
url(r'^api/v1/', include(api_v1)),
url(r'^api/schema(?P<format>\.json|\.yaml)$',
schema_view.without_ui(cache_timeout=0),
name='api_schema_v1'),
...

关于django - drf-yasg 提供了错误的 URI 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58384549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com