Swagger OpenAPI 3.0通用数据类型

Swagger OpenAPI 3.0通用数据类型,swagger,openapi,Swagger,Openapi,我怎样才能最好地描述一个包含OpenAPI3中真实数据类型的通用响应类型 简化示例: ApiResponse: data: object error: string 但是/users端点应该给出: ApiResponse<List<User>> apis响应 这基本上是: ApiResponse: data: List<User> error: string apis响应: 数据:列表 错误:字符串 目前看来这是不可能的,但我只是想确

我怎样才能最好地描述一个包含OpenAPI3中真实数据类型的通用响应类型

简化示例:

ApiResponse:
  data: object
  error: string
但是/users端点应该给出:

ApiResponse<List<User>>
apis响应
这基本上是:

ApiResponse:
  data: List<User>
  error: string
apis响应:
数据:列表
错误:字符串
目前看来这是不可能的,但我只是想确定一下。
我想现在最好的方法是对每个调用进行命名响应,并使用allOf引用ApiResponse和实现数据:specific value。

我搜索了很多泛型类型,但没有办法在OpenAPI3中定义泛型类型。最简单的方法是同时使用allOf和$ref。假设有一个列表架构,如下所示:

List:
   type: object
   properties:
       page_number:
          type: integer
       page_count:
          type: integer
书的模式是

Book:
   type: object
   properties:
       title:
          type: string
       summary:
          type: string
要返回列表,路径为:

  /api/v1/books:
      get:
        responses:
          default:  
            description: description text
            content:
              application/json:
                schema:
                  allOf:
                    - $ref: '#/components/schemas/List'
                    - type: object
                      properties:
                        items: 
                          type: array
                          items: 
                            $ref: '#/components/schemas/Book'
结果是

   {
        "page_number": 1,
        "page_count": 10,
        "items": [{
            "title": "title",
            "description": ""
        },
        ... ]
    }
实际上,这是一张书单。如您所见,可以同时将列表的主要属性添加到结果和列表项类型中。您也可以为其他人重复此模式:

  /api/v1/authors:
      get:
        responses:
          default:  
            description: description text
            content:
              application/json:
                schema:
                  allOf:
                    - $ref: '#/components/schemas/List'
                    - type: object
                      properties:
                        items: 
                          type: array
                          items: 
                            $ref: '#/components/schemas/Author'

好的,您可以使用type
object
additionalProperties
以及true值来获得自由形式的对象。

在Swagger Hubin OAS 3
[main]WARN o.o.codegen.DefaultCodegen-allOf上进行检查,并定义了多个模式。仅使用第一个:List
由此生成的控制器类似乎只返回allOf下定义的一个项目,尽管它在生成的文档中看起来是正确的。我认为这是行不通的。至少对于Java Spring code gen来说是这样。规范中也记录了这种方法: