OpenApi v3:使用已引用的架构时,additionalProperties false 的含义。

7

这个主题有一些问题,但我没有找到正确的方法来解决。

我的目标是在一个地方定义所有参数,并且可以重复使用,无需再次编写。我已经通过使用 "allOf" 实现了这一点,但它限制了对 "additionalProperties" 的使用。

我的模式具有以下结构:

SchemaBase:
  type: object
  properties:
    foo:
      type: string

SchemaFull:
  allOf:
    - $ref: '#/components/schemas/SchemaBase'
    - type: object
      properties:
        bar:
          type: string

我尝试使用使用定义,但似乎在OpenApi 3版本中不再适用。

这里有一个解决方案,但这不是我要找的,因为那只针对属性,而不是整个模式。

1个回答

0
你需要像这样使用 组件
openapi: 3.0.1
info:
  title: OAS 3
  version: 1.0.0
tags:
- name: example
paths:
  /exe:
    post:
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              allOf:
                - $ref: '#/components/schemas/SchemaBase'
                - type: object
                  properties:
                    bar:
                      type: string
      responses:
        200:
          description: Foo
          content: {}
components:
  schemas:
    SchemaBase:
      type: object
      properties:
        foo:
          type: string

您可以在此处查看并使用:https://editor.swagger.io/


JSON模式映射:

{
  "additionalProperties": false,
  "allOf": [
    { "$ref": "#/definitions/SchemaBase" },
    {
      "type": "object",
      "properties": {
        "foo": {
          "type": "string"
        }
      }
    }
  ],
  "definitions": {
    "SchemaBase": {
      "type": "object",
      "properties": {
        "foo": {
          "type": "string"
        }
      }
    }
  }
}

2
抱歉,也许我没有解释清楚。我的意思是想使用“additionalProperties:false”来验证模式的联合,但似乎这是不可能的。我已经尝试了几种不同的组合,但都没有成功。 - Gabriel Rodríguez Flores
你使用的是哪个验证器?- 我已经添加了 additionalProperties: false,这是一个有效的 OAS 模式。 - Manuel Spigolon
2
我正在使用express-openapi,在它上面additionalProperties: false是有效的,但是与allOf一起时不起作用,因为只验证一个架构或另一个。 - Gabriel Rodríguez Flores
2
我想说的是,模式不起作用,它在语法上是正确的,但它将检查没有参数有效,只因为additionalProperties在同级别上工作,而不是在allOf内部。 - Gabriel Rodríguez Flores
明白了,我已经添加了相应的模式,并使用 https://www.jsonschemavalidator.net/ 重新创建了问题。我会尝试一下。 - Manuel Spigolon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接