组件/架构之外的可重用组件?

时间:2018-05-08 15:28:51

标签: swagger openapi

是否有其他地方可以将可重用组件放在components/schema之外?

我有一个"部分" (因为缺乏更好的术语)我想在其他地方$ref,但我不想作为"模型":

一些例子:

NotFoundError:
  type: object
  properties:
    code:
      type: integer
      format: int32
      example: 404
    message:
      type: string
      example: "Resource Not Found"
ID-Array:
  type: array
  items:
    $ref: '#/components/schemas/ID'
  writeOnly: true
ID:
  type: integer
  format: int32
  example: 1
ID-ReadOnly:
  allOf:
    - $ref: '#/components/schemas/ID'
    - readOnly: true
ID-WriteOnly:
  allOf:
    - $ref: '#/components/schemas/ID'
    - writeOnly: true

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是将部分放在某些extension key之下,比如x-partials,并相应地更改$ref。只要目标处于预期格式,$ref就不关心路径是什么。

x-partials:
  ID:
    type: integer
    format: int32
    example: 1

components:
  schemas:
    ID-Array:
      type: array
      items:
        $ref: '#/x-partials/ID'
      writeOnly: true
    ID-ReadOnly:
      allOf:
        - $ref: '#/x-partials/ID'
        - readOnly: true
    ID-WriteOnly:
      allOf:
        - $ref: '#/x-partials/ID'
        - writeOnly: true

这种方式,例如,部分内容不会出现在"模型" Swagger UI部分。