Swagger 中的 $ref 标签

Posted

技术标签:

【中文标题】Swagger 中的 $ref 标签【英文标题】:$ref tag in Swagger 【发布时间】:2016-02-08 06:25:23 【问题描述】:

如何在 Swagger 中使用 $ref 标签来引用不同文件中的定义?

Swagger Editor 中的所有示例都定义了 same 文件中 $ref 标记所引用的任何内容。

例如在 Swagger Editor 上可用的 Uber API 示例中,它有许多引用,例如“#/definitions/Product”和“#/definitions/Errors”。但是,两者都在“定义”部分的 same 文件中定义。

如果我想在一个不同的文件中定义“产品”或“错误”,我该怎么做呢?定义文件将包含哪些标签?它是否需要 Swagger 的所有强制标志(如 paths)?另外,如何在文档中呈现定义?

【问题讨论】:

【参考方案1】:

这是一个例子:

"parameters": [
 
    "name": "cat",
    "in": "body",
    "description": "The JSON payload for the new cat",
    "required": true,
    "schema": 
       "$ref": "cat-new.json"
    
  
]

并且 cat-new.json 定义了以下内容:


  "description":"An adorable cat",
  "type":"object",
  "properties":
    "name":
       "type":"string",
       "description":"The name given to this cat by the adoption staff",
       "minLength":3,
       "maxLength":15
    ,
    "colour":
       "type":"string",
       "description":"The colour of the cat's fur",
       "enum":[
          "black",
          "tan",
          "ginger",
          "blue",
          "white"
       ]
    ,
    "toys":
       "type":"array",
       "description":"The favourite toys of the cat",
       "items":
          "type":"string"
       ,
       "maxItems":3,
       "uniqueItems":true
    
  

参考:

1) https://github.com/swagger-api/swagger-codegen/issues/1145

2)https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#relative-schema-file-example

【讨论】:

谢谢@wing328。我现在了解如何引用定义文件。我假设我需要将它放在与主文件相同的文件夹中。 Swagger 编辑器/任何 Swagger 文档门户会从本地驱动器读取它并将其显示在定义中吗? 我不确定 swagger-editor 如何处理 $ref 到本地文件或 URL。请在github.com/swagger-api/swagger-editor/issues 打开一个“问题”以了解更多信息。

以上是关于Swagger 中的 $ref 标签的主要内容,如果未能解决你的问题,请参考以下文章

Swagger/OpenAPI - 使用 $ref 传递可重用的定义参数

RAML 资源类型和特征 VS Swagger $ref

无法使Swagger ui与springboot一起使用,得到白色标签错误(403)

Swagger 引用一个 Spring 对象的响应,使用 Swagger 进行分页

Swagger-YAML 错误映射条目

Spring Boot 和 Swagger 文本/html 响应映射