【问题标题】:Openapi - duplicate operationID and extra parameterOpenapi - 重复操作ID和额外参数
【发布时间】:2021-07-14 02:11:04
【问题描述】:

我正在使用 Swagger 记录我的 Django API。当我生成我的 Openapi 模式时,会为我的每个路径添加带有附加参数 {format} 的第二条路由,其操作 ID 与“正确”路由相同。

我读到如果我有多个具有相同模型的视图,生成器可能会生成重复的 operationId,但我认为这不是我的情况。

总的来说,我的视图(resource/api/views.py)都是这样组织的:

class ResourceList(APIView):

    """
    View to list Resources.
    """

    def get(self, request, parameter1):
       ...

class ResourceDetail(APIView):

    """
    View to retrieve information of a Resource.
    """

    def get(self, request, parameter1, parameter2):
        ...

对于这两个视图,我有这两条路径:

urlpatterns = ([
    path('<str:parameter1>', views.ResourceList.as_view()),
    path('<str:parameter1>/details/<str:parameter2>', views.ResourceDetail.as_view())
])

模式生成器为每个生成两个路由。

对于第一条路径:

Route: /api/resource/{parameter1}, Method: get
Route: /api/resource/{parameter1}{format}, Method: get

对于第二条路径:

Route: /api/resource/{parameter1}/details/{parameter2}, Method: get
Route: /api/resource/{parameter1}/details/{parameter2}{format}, Method: get

出现这样的警告:

Route: /api/resource/{parameter1}, Method: get
Route: /api/resource/{parameter1}{format}, Method: get
An operationId has to be unique across your schema. Your schema may not work in other tools.

警告显然是有道理的,因为两条路线具有相同的 operationID,(在这种情况下为retrieveResourceList)。我不明白为什么要生成第二条路线以及format 参数来自哪里。

这是正常行为吗?如果没有,我做错了什么?

【问题讨论】:

    标签: django-rest-framework swagger schema documentation openapi


    【解决方案1】:

    这可能不是完全解决此问题的方法,但就我而言,我尝试评论 format_suffix_patterns 并且 format 参数消失。以下是我管理网址的方式:

    from rest_framework.urlpatterns import format_suffix_patterns
    
    urlpatterns = [...]
    
    urlpatterns = format_suffix_patterns(urlpatterns) # Comment this
    

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 2022-11-01
      • 2018-10-29
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多