Swagger 在远程服务器上托管可重用组件定义,并在OpenAPI spec 3.0中将其用作$ref
我试图在OAS 3.0(OpenAPI规范3.0)中创建可重用组件定义并通过Swagger 在远程服务器上托管可重用组件定义,并在OpenAPI spec 3.0中将其用作$ref,swagger,openapi,swagger-editor,Swagger,Openapi,Swagger Editor,我试图在OAS 3.0(OpenAPI规范3.0)中创建可重用组件定义并通过$ref引用它们来进行POC。我尝试了以下方法: 在我的本地机器上下载了Swagger编辑器 在我的本地计算机上创建了一个文件,其中包含我们希望跨多个API重用的公共响应 在规范中提供了该文件的引用-“$ref”:file:///path 本地目录/myreference.json“ 输出不反映我引用的文件的内容。我做错什么了吗 还想知道,如果我们在一些repo(比如GitHub)上托管这样的规范,那么它们是否能够正确解
$ref
引用它们来进行POC。我尝试了以下方法:
- 本地引用–
$ref:“#/definitions/myElement”
表示转到当前文档的根目录,然后逐个查找元素定义和myElement#
- 远程引用–
使用位于同一服务器和同一位置的整个文档。$ref:'document.json'
- 位于同一服务器上的文档元素–
$ref:'document.json#/myElement'
- 位于父文件夹中的文档元素–
$ref:'../document.json#/myElement'
- 位于另一个文件夹中的文档元素–
$ref:'../other folder/document.json#/myElement'
- 位于同一服务器上的文档元素–
- URL参考–
使用位于不同服务器上的整个文档。$ref:'http://path/to/your/resource“
- 存储在不同服务器上的文档的特定元素–$ref:“” 不同服务器上的文档,使用相同的协议(例如HTTP或HTTPS)–$ref:“//anotherserver.com/files/example.json”
而
$ref:file:///path
是有效的JSON引用[1],您不应该使用它们,因为它们不可移植。相反,请使用相对引用,如中建议的,$ref:'../relative/path/to/file.yaml'
或类似引用
$ref的原因:file:///...
在Swagger UI和Swagger Editor中不起作用,因为它们是网页,使用JavaScript解析定义,浏览器出于安全原因拒绝从JavaScript访问文件://
方案。
您能推荐一个可用于托管可重用定义文件的站点吗 为OpenAPI定义提供云托管。可重用组件(模式定义、响应等)可以存储在所谓的“域”文件中,并跨多个API定义使用 披露:我在一家制造“大摇大摆”的公司工作
[1] 根据报告: “$ref”字符串值包含URI[]
和
file:///...
是有效的URI。浏览器控制台中是否有任何错误?Helen,你好,控制台上没有错误,但它不反映编辑器中的输出。你好@lordrodos,谢谢你的回复。您能推荐一个可用于托管可重用定义文件的站点吗?您可以使用任何公开可用的托管提供商或重用您“拥有”的任何域来托管文件。我建议你的是让我们来验证你的规格。您还将获得基于ReDoc的漂亮文档预览。