检索Swagger定义中的特定对象或数组

时间:2018-01-19 20:49:11

标签: arrays swagger swagger-ui swagger-2.0

假设我有如下定义:

definitions:
  assetList:
    type: object
    properties:
      assets:
        type: array
        items:
          type: object
          properties:
            id:
              type: string
              description: ID
      total:
        type: integer
        description: total

我在许多端点上引用了这个定义,但是有一个端点只响应assets下具有ID属性的对象,并且它不在数组中。

通常的引用方式是作为响应主体$ref: '#/definitions/assetList',但这包括整个定义。有没有什么方法可以引用assets数组中的对象而不创建一个完整的新定义?

1 个答案:

答案 0 :(得分:0)

  

有没有什么方法可以引用资产数组中的对象而不创建一个完整的新定义?

不确定你的意思"全新"这里的定义。常见的解决方案是在单独的定义中提取对象,并从assetList和响应主体引用它:

...
  responses:
    200:
      description: OK
      schema:
        $ref: '#/definitions/myObject'   # <----

definitions:
  assetList:
    type: object
    properties:
      assets:
        type: array
        items:
          $ref: '#/definitions/myObject'  # <----
      total:
        type: integer
        description: total

  myObject:   # <-----
    type: object
    properties:
      id:
        type: string
        description: ID


如果您的意思是不想提取内部架构,则可能(取决于您使用的工具)直接引用内部架构:

$ref: '#/definitions/assetList/properties/assets/items'

#/foo/bar/...语法是JSON Pointer,它允许指向JSON结构中的任何元素(或者在本例中为YAML结构)。

但实际上,不鼓励这样的引用,有些工具可能不支持它们。