OpenAPI重用定义的一部分而不定义新的定义

时间:2017-10-17 05:55:28

标签: swagger models specifications openapi definitions

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

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

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

{{1}}

1 个答案:

答案 0 :(得分:1)

在您的问题中,您使用definitions关键字提示您的问题是OpenAPI v2 aka. Swagger。对于OpenAPI v3,下面提供的定义应在适当的Components Object部分内定义。

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

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关键字。
  • 使用组合可能会增加或减少文档的可读性,具体取决于用于命名模式的单词的复杂性和选择。