【问题标题】:how to set one value for few key's in YAML object如何为 YAML 对象中的几个键设置一个值
【发布时间】:2018-12-18 15:27:01
【问题描述】:

据我所知,没有办法将几个键附加到 YAML 中 {key : value} 对中的单个值。 我是 Swagger 文档(OpenAPI 3.0)的新手,想知道是否有可能以某种方式将我的价值观结合在一起。 例如,我正在搞乱 REST API 文档,当我想列出一些响应而不每次都重写时,我有以下内容:

paths:
  /users:
      post:
//some additional information here
        responses:
          '500':
//and for example here I want to add not only 201 status code but also others
                description: >-
                  Something went wrong on back end
//however I have to do something like this (writing them all)
          '502':
                description: >-
                  Something went wrong on back end
//and so on..

克服这个问题的最佳做法是什么?也许我从一开始就有一个不好的观点。

【问题讨论】:

  • YAML cmets 以 # 开头。

标签: rest api yaml openapi swaggerhub


【解决方案1】:

您可以使用锚点和别名:

path:
  /users:
    responses:
      '500':
        description: &desc1 >-
          Something went wrong on back end
      '502':
        description: *desc1

【讨论】:

  • YAML 锚可能工作也可能不工作,具体取决于所使用的 OpenAPI 解析器。
  • @Helen well OpenAPI 明确指定文档可以表示为 YAML 并且对锚点/别名的使用没有任何限制,因此如果解析器不支持它,那就是解析器中的错误。
【解决方案2】:

OpenAPI 3.0 支持响应范围'1XX'-'5XX',可以使用它来代替单独列出代码:

    responses:
      '5XX':
        description: Something went wrong on back end

如果您仍想单独列出响应代码但它们具有相同的descriptionschema,您可以像这样$ref 通用响应定义:

    responses:
      '501':
        $ref: '#/components/schemas/BackendErrorResponse'
      '502':
        $ref: '#/components/schemas/BackendErrorResponse'

components:
  responses:
    BackendErrorResponse:
      description: Something went wrong on back end
      content:
        application/json:
          schema:
            ...

OpenAPI 规范存储库中还有一个增强请求以允许reusing description across different responses

【讨论】:

  • 好的,非常感谢您的帮助,但是出现了另一个问题。因此,例如,我已经用您的第二个解决方案解决了我的问题,现在我得到以下回复:responses: BadRequest: description: Bad request content: application/json: schema: $ref: '#/components/schemas/error' Unauthorized: description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/error' 是否有可能以某种方式重用类似的内容?
  • 对不起,我仍然不知道如何在cmets中很好地格式化代码。
  • 如果你的意思是重用content键,OpenAPI不支持$ref'erencingcontent键,你可以$ref或者整个响应(描述+内容)或者只是内容schema。但是你可以试试 YAML 锚点as suggested by flyx。 YAML 锚点应该可以在 Swagger Editor 和 Swagger UI 中使用,但我不知道其他工具。
猜你喜欢
  • 2022-12-10
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2016-06-07
  • 2011-05-14
  • 2021-06-04
  • 2020-08-12
相关资源
最近更新 更多