如何在 .yaml 文件中对"structure contains one or more X"进行编码



我正试图在.yaml文件中定义一个OpenAPI接口。接口规范说,参数之一将是数据结构foo,其中包括第二数据结构bar的一个或多个成员。在C++中,我会定义一个包含bar向量的结构,但我不知道如何在YAML中对其进行编码。我试着只列出一个项目,Swagger编辑抱怨道:

# ... details omitted
- in: header
name: foo
required: true
schema:
type: object
properties:
identity:
type: integer
version:
type: integer
- bar: # <<<<< bad indentation of a mapping entry
type: object
properties:
key:
type: string
value:
type: string

这看起来并不是一个真正的压痕问题。我这么说是因为删除错误的唯一缩进级别是in的后退级别。请注意,如果我删除短划线和后面的空格,编辑器不会显示任何错误,所以我确信这里没有其他问题。

主要问题如何将此参数定义为包含一个或多个类型为bar结构的参数?

奖励问题有没有办法命名我正在定义的结构,例如KeyValuePair代表bar

这看起来并不是一个真正的缩进问题。

没有,但它是一个语法错误,与OpenAPI(或JSON模式,这与您的问题最相关(无关。YAML定义了文档的结构,而您犯了一个结构错误。这个片段足以看到错误:

version:
type: integer
- bar:

密钥version:表明我们在映射中,即键值对列表。下面是一个带有单个条目type: integer的嵌套映射。然而,-version:的缩进级别之后。在YAML中,这是一个序列指示符。但在version:的压痕水平上不存在序列;相反,此缩进级别包含映射。不能将序列项作为映射的一部分,因为映射包含键值对。错误消息当然可以是更好的消息。

现在,您实际想要做的是定义一个条形数组(JSON术语,表示条形向量(:

version:
type: integer
bar:
type: array
items:
type: object
properties:
key:
type: string
value:
type: string

请注意输入的语法YAML结构和所需的输入语义之间的重要区别。您想要在JSON模式中描述一个数组,但这并不意味着您必须使用YAML序列。如果您想定义一个整数类型字段,也不需要编写42

还要注意,bar是字段的名称,而不是类型的名称。您可以使用$ref引用以前定义的类型。

相关内容

最新更新