基于OpenApi3,我想将RequestBody与相同响应代码“200”和相同端点的响应相匹配

问题描述 投票:0回答:1

我是 openapi 3.0.0 或 3.1.0 的新蜜蜂 我正在使用:

  • redocly 捆绑 openapi.yaml --output bundled.yaml
  • redocly 预览文档 bundled.yaml 编译一切, 我已经开始使用宠物店的例子。

我正在尝试自动同步多个元素以实现简单的 REST API 描述。

对于 /orders 端点上的特定 POST 请求,我可以发送 2 个不同的正文:具有不同属性值的 SlimcollectVerify 和 SlimCollectPayUnsigned。这可以通过 oneOf 标签来实现,并且这是实用的。现在,根据所选的主体,对于相同的响应代码,响应将有所不同:“200”:

  • 对 SlimcollectVerify 的回应
  • SlimCollectPayUnsigned 的回复

。第一个问题是:当我在命令描述正文中选择 SlimcollectVerify 或 SlimCollectPayUnsigned 时,将此信息同步到 200 的“响应描述部分”中。这意味着如果我选择“SlimcollectVerify”,我希望获得“SlimcollectVerify 的响应” ”,如果我选择“SlimCollectPayUnsigned”,则为“SlimCollectPayUnsigned 的响应”。 。第二个问题是:当我在命令描述中选择 SlimcollectVerify 或 SlimCollectPayUnsigned 时,我希望在示例 RequestBody

AND

示例响应部分中同步此选择 界面示例如下:

enter image description here 我也尝试过引入鉴别器,但没有成功。

我从网上搜索了示例,但不幸的是找不到任何示例。 预先感谢您的帮助

以下是组件:

components: slimcollectVerify: description: A representation of slimcollectVerify allOf: # <- - $ref: '#/components/schemas/CreateOrder' - type: object properties: huntingSkillSCVerifiy: type: string description: The measured skill for Verify default: lazy example: adventurous enum: - clueless - lazy slimcollectPayUnsigned: description: A representation of slimcollectPayUnsigned allOf: # <- - $ref: '#/components/schemas/CreateOrder' - type: object properties: huntingSkillSCPayUnsigned: type: string description: The measured skill for PayUNsigned default: lazy example: adventurous enum: - clueless - lazy - adventurous - aggressive requestBodies: CreateOrder: content: application/json: schema: oneOf: - $ref: '#/components/schemas/slimcollectVerify' - $ref: '#/components/schemas/slimcollectPayUnsigned' # <- discriminator: # <- propertyName: createOrderItemType # <- property used to discriminate between response types # <- required: # <- - createOrderItemType # <- it must be required description: Request Body of the create order required: true

路径如下:

paths: /orders: post: tags: - pet summary: Create an order description: Command to create an order. operationId: createOrder responses: '200': description: successful operation content: "application/json": schema: oneOf: - $ref: '#/components/schemas/slimcollectVerify' - $ref: '#/components/schemas/slimcollectPayUnsigned' discriminator: propertyName: createOrderItemType # <- property used to discriminate between response types required: - createOrderItemType # <- it must be required '405': description: Invalid input requestBody: $ref: '#/components/requestBodies/CreateOrder'```


parameters synchronization openapi discriminator
1个回答
0
投票

    OpenAPI 不支持您所描述的类似“场景”的行为。我不知道有任何工具能够在不使用某种自定义的情况下创建这些场景。我看到其他人尝试使用
  1. examples

    映射键来指示类似的内容。这是我前几天为有类似请求的人创建的一个示例。

    https://stackoverflow.com/a/77002583/8564731

  2. 这是 Redocly 的功能请求,与 OpenAPI 无关。您的架构是正确且有效的。我看到其他人请求类似的东西
  3. https://github.com/Redocly/redoc/issues/2346

  4. 随时向 Redocly 团队提交新问题。他们很友好并提供惊人的支持。
www.github.com/redocly/redocly/issues

如果您热衷于加入有关 OpenAPI 未来的讨论,OAI github 讨论中目前正在讨论此功能以及许多其他增强功能。

https://github.com/OAI/OpenAPI-Specification/discussions/2930

© www.soinside.com 2019 - 2024. All rights reserved.