为什么模式从其子模式继承数组项的示例?

Why did a schema inherit examples of array items from its subschema?

打开API 3.0.0,Swagger在线编辑器。

我通过 allOf 鉴别器组成子模式,并为结果模式设置 example 字段。然而,Swagger UI 并未按原样提供示例。

架构包含一个源自子架构的数组。该数组继承了子模式中的示例项,并使用模式中的示例扩展了列表。

例子

假设我们有两个模式:

Cats:
  type: object
  properties:
    cats:
      type: array
      items:
        type: object
        properties:
          fluffiness:
            type: integer
          names:
            type: string
  example:
    cats:
      - fluffiness: 9
        names: "Felix"
      - fluffiness: 10
        names: "Neko"
        

FluffiestCats:
  allOf:
    - $ref: '#/components/schemas/Cats'
    - type: object
      properties:
        date:
          type: string
          format: "date"
  example:
    cats:
      - fluffiness: 10
        names: "Luna" 
      - fluffiness: 10
        names: "Meowie"
    date: "17-01-2021"

响应一些请求,API 检索最毛茸茸的猫,引用 #/components/schemas/FluffiestCats/。 Swagger UI 生成以下响应示例。

{
  "cats": [
    {
      "fluffiness": 9,
      "names": "Felix"
    },
    {
      "fluffiness": 10,
      "names": "Neko"
    },
    {
      "fluffiness": 10,
      "names": "Luna"
    },
    {
      "fluffiness": 10,
      "names": "Meowie"
    }
  ],
  "date": "17-01-2021"
}

Swagger UI 从 subschema 示例项目中获取两个示例。 提供的示例不会覆盖子模式示例。

  1. 这种行为是否与规范相矛盾?根据描述,好像是Schema Object's example field doesn't imply override, in contrast to the Parameter Object'sexample字段。
  2. 如何覆盖子模式示例?或者我是否必须在不使用 allOf 的情况下重新创建架构?

参考资料

  1. OpenAPI 3.0.0 specification

It was an issue 与 Swagger UI.

已在 Swagger UI 4.5.0 和 Swagger Editor 4.0.7 中修复。