1

假设我在 yaml OpenApi 定义中有这个定义

definitions:
  User:
    description: "User"
    type: "object"
    properties:
      firstname:
        type: "string"
      lastname:
        type: "string"
      password:
        type: "string"
      email:
        type: "string"
      username:
        type: "string"

如果在参数规范中我需要定义的特定字段,我如何在不定义另一个模型的情况下引用它们,如下所示?

definitions:
  UserLogin:
    description: "User"
    type: "object"
    properties:
      password:
        type: "string"
      email:
        type: "string"
4

1 回答 1

1

在您的问题中,您使用的definitions关键字暗示您的问题是关于OpenAPI v2 aka 的。大摇大摆。对于OpenAPI v3,下面提供的定义应在相应的组件对象部分中定义。

为了实现这一点,您必须使用带有关键字的组合allOf这里有一个与您的问题相关的很好的例子。首先,您必须定义一个较小的对象,然后将其包含在一个较大的对象中,如下所示:

definitions:
  UserLogin:
    description: User Login
    type: object
    properties:
      password:
        type: string
      email:
        type: string
  User:
    allOf:
    - $ref: '#/definitions/UserLogin'
    - description: User
      type: object
      properties:
        firstname:
          type: string
        lastname:
          type: string
        username:
          type: string

值得一提的是:

  • 一些较轻的实现可能不支持allOf关键字。
  • 使用组合可能会增加或降低文档的可读性,具体取决于用于命名模式的单词的复杂性和选择。
于 2017-11-16T12:48:55.330 回答