如何将两个 openapi/swagger 模式组合成一个模式
Posted
技术标签:
【中文标题】如何将两个 openapi/swagger 模式组合成一个模式【英文标题】:How to combine two openapi/swagger schemas into one single schema 【发布时间】:2021-11-20 12:07:42 【问题描述】:我在 openapi 文件中有两个架构:
SchemaA:
type: object
properties:
property_a1:
type: string
property_a2:
type: string
SchemaB:
type: object
properties:
property_b1:
type: string
property_b2:
type: string
我希望得到的架构是:
ResultantSchema:
type: object
properties:
property_a1:
type: string
property_a2:
type: string
property_b1:
type: string
property_b2:
type: string
我尝试过使用 allOf 操作符这样组合:
ResultantSchema:
type: object
properties:
- $ref: '#/SchemaA'
- $ref: '#/SchemaB'
但这会产生一个包含两个对象的模式的结果:
WrongResultantSchema:
- type: object
properties:
property_a1:
type: string
property_a2:
type: string
- type: object
properties:
property_b1:
type: string
property_b2:
type: string
哪里错了...有没有办法用一个对象而不是两个嵌套对象来实现结果模式?
【问题讨论】:
【参考方案1】:以下是在 OpenAPI 3.0 中组合多个模式的方法:
ResultantSchema:
allOf:
- $ref: '#/components/schemas/SchemaA'
- $ref: '#/components/schemas/SchemaB'
在 OpenAPI 2.0 (swagger: '2.0'
) 中:
ResultantSchema:
allOf:
- $ref: '#/definitions/SchemaA'
- $ref: '#/definitions/SchemaB'
【讨论】:
不,这不起作用,它仍然在一个模式下显示两个对象。 你能添加一个错误的截图吗?以上是关于如何将两个 openapi/swagger 模式组合成一个模式的主要内容,如果未能解决你的问题,请参考以下文章
如何注释 OpenAPI (Swagger) 2.0 中已弃用的字段?
如何在 OpenAPI / Swagger 中递归引用封闭类型定义?
如何在 OpenAPI (Swagger) 中为相同的 HTTP 状态代码定义不同的响应?
如何在 OpenAPI (Swagger) 中为同一路径定义不同的查询参数?
如何在 Apache Camels RouteBuilder.restConfiguration() 中添加 OpenApi/Swagger securitySchemes?