首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenAPI 3.0通用数据类型

OpenAPI 3.0通用数据类型
EN

Stack Overflow用户
提问于 2018-07-24 21:08:04
回答 2查看 12.7K关注 0票数 26

在OpenAPI 3中,如何最好地描述包含真实数据类型的泛型响应类型。

简化示例:

代码语言:javascript
代码运行次数:0
运行
复制
ApiResponse:
  data: object
  error: string

但是/users端点应该提供:

代码语言:javascript
代码运行次数:0
运行
复制
ApiResponse<List<User>>

所以这基本上就是:

代码语言:javascript
代码运行次数:0
运行
复制
ApiResponse:
  data: List<User>
  error: string

目前看起来这是不可能的,但我只是想确认一下。我想现在最好的方法是对每个调用进行命名响应,并使用allOf引用ApiResponse并实现数据:特定值。

EN

回答 2

Stack Overflow用户

发布于 2018-08-06 17:59:49

我花了很多时间寻找泛型类型,但是没有办法在OpenAPI3中定义泛型类型。最简单的方法是同时使用allOf和$ref。假设有如下列表模式:

代码语言:javascript
代码运行次数:0
运行
复制
List:
   type: object
   properties:
       page_number:
          type: integer
       page_count:
          type: integer

书的模式是

代码语言:javascript
代码运行次数:0
运行
复制
Book:
   type: object
   properties:
       title:
          type: string
       summary:
          type: string

要返回列表,路径为:

代码语言:javascript
代码运行次数:0
运行
复制
  /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'

这个结果是

代码语言:javascript
代码运行次数:0
运行
复制
   {
        "page_number": 1,
        "page_count": 10,
        "items": [{
            "title": "title",
            "description": ""
        },
        ... ]
    }

实际上,这是一份书单。如您所见,您可以同时将列表的主要属性添加到结果和列表项类型中。您也可以对其他人重复此模式:

代码语言:javascript
代码运行次数:0
运行
复制
  /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'
票数 24
EN

Stack Overflow用户

发布于 2019-01-15 23:26:35

您可以使用带有additionalProperties的类型object和true值来获取自由形式的对象。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51499445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档