如何在RAML中同时启用additionalProperties:false与模式属性?
解决RAML中同时限制额外属性与支持模式属性的问题
你遇到的问题完全符合RAML的规范约束——当显式设置additionalProperties: false时,properties字段里不允许出现正则命名的模式属性,因为RAML会把这些正则属性当成“未明确指定的额外属性”来处理,所以才会报出extraneous key [...] is not permitted的错误。
要实现“只允许固定属性+符合特定模式的属性,禁止其他所有额外属性”的需求,你需要用到RAML 1.0引入的**patternProperties字段**——它专门用来定义匹配正则表达式的动态属性,和固定名称属性的properties字段是分开的。
正确的RAML类型定义写法
types: Person: description: |- Document representing a person. # 定义固定名称的属性 properties: firstName?: description: |- The person's first name type: string # 定义匹配正则的动态属性 patternProperties: /^person_info_.+$/?: description: Additional person info. type: string # 禁止所有未在properties/patternProperties里定义的额外属性 additionalProperties: false
这个写法的效果
- 允许
firstName这类固定名称的属性(可选) - 允许所有符合
/^person_info_.+$/正则的属性,比如person_info_age、person_info_work等 - 直接拒绝任何既不在
properties里、又不匹配patternProperties正则的属性(比如lastName、address),完全符合你的需求。
本质上,patternProperties就是RAML用来专门处理“动态命名但有规则的属性”的字段,和additionalProperties: false搭配使用时,既能严格控制属性范围,又能支持模式化的动态属性,完美解决你遇到的冲突问题。
内容的提问来源于stack exchange,提问作者pst
相关产品推荐
相关产品推荐

