重用对模型的引用,但重新定义所需的属性

时间:2018-03-20 18:35:04

标签: swagger openapi

  

这是一个有着类似标题here的问题,但是   只有答案没有完全回答这个问题,所以希望这样的事情   自从我再次尝试以来已经改变了。

我有Car的模型,我想用GET次请求创建我需要name的新实例。

此外,我想在PUT次请求中使用它来更新现有实例。更新请求不应具有所有属性,路径中已指定Car标识符,并且只有当前属性才会被合并'进入现有对象。

我尝试使用以下规范:

CarProperties:
  type: object
  properties:
    name:
      type: string
      title: Car Name
      description: A friendly name for this car.
      minLength: 1
      md:
        type: object
        hidden: 'true'
    description:
      type: string
      title: Car Description
      description: A detailed description of the car.
      md:
        type: object
        hidden: 'true'

UpdateCar:
  allOf:
    -  { $ref: '#/definitions/CarProperties' }
  type: object  

NewCar:
  allOf:
    -  { $ref: '#/definitions/CarProperties' }
  type: object  
  required: [name]

我希望name只有NewCar所需的属性,但在NewCarUpdateCar中,属性name都是可选的。

如何从引用的模型中指定所需属性的子集?

1 个答案:

答案 0 :(得分:1)

在摆弄一段时间之后,似乎我对required字段的缩进很差。以下语法似乎产生了我想要的东西:

CarProperties:
  type: object
  properties:
    name:
      type: string
      title: Car Name
      description: A friendly name for this car.
      minLength: 1
      md:
        type: object
        hidden: 'true'
    description:
      type: string
      title: Car Description
      description: A detailed description of the car.
      md:
        type: object
        hidden: 'true'

UpdateCar:
  allOf:
    - { $ref: '#/definitions/CarProperties' }
    - type: object  

NewCar:
  allOf:
    - { $ref: '#/definitions/CarProperties' }
    - type: object
      required: [name]

现在我有:

  1. NewCar具有必填name字段的实体。
  2. UpdateCar具有可选name字段的实体。
  3. 如果我想将另一个属性添加到Car,我只需要在一个地方添加。