如何在没有数组的情况下拥有多个无限对象 - Open API / Swagger

How to have multiple infinite objects without an array - Open API / Swagger

我正在尝试为 JSON 的以下片段设置一个开放的 api 规范:

                    "test1": {
                        "1739573957": {
                            "tester1": 123,
                            "tester2": "Company"
                        },
                        "64903826718": {
                            "tester1": 123,
                            "tester2": "Company"
                        }
                        "5902849189": {
                            "tester1": 123,
                            "tester2": "Company"
                        }
                    }

test1 中的对象具有随机化的 guid,并且以通常是数组的方式列出,但实际上不是。测试 1 中可能有无数个对象。有人知道如何设置吗?

您正在寻找 free-form-object:

A free-form object (arbitrary property/value pairs) is defined as: type: object

This is equivalent to

type: object 
additionalProperties: true 

and

type: object 
additionalProperties: {}

但是,如果您可以更改 API,我强烈建议将其更改为测试数组或对象定义的任何内容。将 id 作为 属性 放入此对象中,您就可以开始了。这使得为​​其创建 DTO 变得容易得多。

test1 是一个字符串到对象的字典,可以定义如下(假设 OpenAPI 3):

components:
  schemas:
    Tester:  # Or however you would name the nested objects
      tester1:
        type: integer
        example: 123
      tester2:
        type: string
        example: Company

...
test1:
  type: object
  additionalProperties:
    $ref: '#/components/schemas/Tester'

  # Optional example for the `test1` property
  example:
    '1739573957':
      tester1: 123
      tester2: Company
    '64903826718':
      tester1: 123
      tester2: Company

The objects inside test1 have randomized guids

在OpenAPI 3.1中,您可以使用代替additionalProperties来定义test1中的键是数字字符串。早期的 OpenAPI 版本无法定义字典键的格式。

# openapi: 3.1.0

test1:
  type: object
  patternProperties:  # <-----
    '^\d+$':          # <-----
      $ref: '#/components/schemas/Tester'