【问题标题】:Swagger: Reusing an enum definition as query parameterSwagger:重用枚举定义作为查询参数
【发布时间】:2015-11-22 04:34:26
【问题描述】:

我想使用definitions 中定义的枚举作为查询字符串中参数定义的一部分。

我在我的 Swagger 2.0 规范文件的 definitions 部分中定义 Swagger 枚举。

OperationType:
  type: string
  enum:
  - registration
  - renewal

我可以在其他定义中创建对它的引用:

Operation:
  type: object
  properties:
    name:
      type: string
    type:
      $ref: '#/definitions/OperationType'

当参数为in: body时我可以使用schema标签来引用它,但当它是in: query时则不行

    - name: operation
      in: body
      description: description
      schema:
        $ref: '#/definitions/OperationType'

我尝试删除 schema: 并在 enum: 中进行引用,但无法正常工作。

【问题讨论】:

    标签: swagger swagger-2.0


    【解决方案1】:

    对于 Swagger 2.0,我们限制了将模型定义用于除 body 参数之外的任何内容的能力。 definitions 部分用于定义模式,也可用于定义非对象。但是,这些定义只能在使用 schema 关键字的地方访问。如最初所述,schema 不可用于非正文参数,因此不能被查询或路径参数使用,从而限制了重用这些定义的能力。

    有一个open feature request 要求在未来版本的规范中处理它。

    【讨论】:

    • 不,但看起来在 3.0 中是可能的。
    • @Ron 期待它。看起来真的很有用。
    • 我也有同样的问题。有解决方案吗?我希望能够跨参数重用枚举定义。
    • 在下一版本的规范中行为发生变化。
    【解决方案2】:

    这在 OpenAPI 3.0 中是可能的。现在所有参数都使用schema,并且通过扩展,可以$ref 架构。

    openapi: 3.0.0
    ...
    paths:
      /something:
        get:
          parameters:
            - in: query
              name: action
              schema:
                $ref: '#/components/schemas/OperationType'
          ...
    
    components:
      schemas:
        OperationType:
          type: string
          enum:
            - registration
            - renewal
    

    【讨论】:

      猜你喜欢
      • 2016-08-21
      • 2013-12-13
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      相关资源
      最近更新 更多