当提供支持多个 API 规范的预生成链接时,Swagger UI 不会加载规范

我有一个用 Go 编写的服务,它也使用 go 模板作为前端。该服务被我们的外部第三方用作查找资料和搜索的门户。还有另一个服务是用于处理订单的休息 API。门户服务有一个页面,您可以在其中查找 API 文档。我只有一个 API 版本,我使用 SwaggerUI 来显示 API 文档。我必须创建一个新端点并使其成为新 API 版本的一部分。现在我想展示一个新的 API 版本,以及支持旧客户端的旧版本。像这样的东西: 

http://img3.mukewang.com/6267a49000017dbe16380224.jpg

所以当用户点击门户网站上的按钮查看文档时,请求由门户中的这个函数处理(注意:我已经重构了这个函数以支持多个 url):


func getDocs(c echo.Context) error {

    source := c.Get(auth.SourceName).(string)

    key := c.Get(auth.KeyName).(string)


    jsonURLs := []DocsURL{

        {

            url:         fmt.Sprintf("%s/0.1/docs?source=%s", config.baseURL, key),

            name:        "0.1"

        },

        {

            url:         fmt.Sprintf("%s/1.0/docs?source=%s", config.baseURL, key),

            name:        "0.1"

        },

    }


    return c.Render(http.StatusOK, "docs/index", map[string]interface{}{

        "source":   source,

        "key":      key,

        "pageType": "docs",

        "jsonURLs": jsonURLs,

    })

}

这是我使用 SwaggerUI 的模板中的脚本:


  window.onload = function() {

    const ui = SwaggerUIBundle({

      urls: {{ .jsonURLs }},

      dom_id: '#swagger-ui',

      deepLinking: true,

      presets: [

        SwaggerUIBundle.presets.apis,

        SwaggerUIStandalonePreset

      ],

      plugins: [

        SwaggerUIBundle.plugins.DownloadUrl

      ],

      layout: "StandaloneLayout",

      supportedSubmitMethods: []

    })

    window.ui = ui

    $('.tryitout').prop('disabled', true);

  }

我需要根据环境(生产、登台、本地)生成链接。在后端生成数据并将其提供给模板进行显示也是有意义的。但这不起作用!


但是,如果我对链接中的链接进行硬编码,SwaggerUIBundle它可以工作,并且门户网站会显示正确的下拉菜单,并允许在版本之间切换并加载相应版本的文档。


func getDocs(c echo.Context) error {

    source := c.Get(auth.SourceName).(string)

    key := c.Get(auth.KeyName).(string)


    return c.Render(http.StatusOK, "docs/index", map[string]interface{}{

        "source":   source,

        "key":      key,

        "pageType": "docs",

    })

}


这是为什么?有没有办法让第一个版本的代码工作?


我需要链接是动态的,最好在处理程序中生成。谢谢!


慕尼黑8549860
浏览 161回答 1
1回答

开心每一天1111

似乎有两个错误:第一的:  urls: {{ .jsonURLs }},这不会jsonURLs为您以 JSON 格式编写。它会简单地写一个字符串表示jsonURLs。要么您需要编写模板来迭代其中的元素jsonURLs并一一打印出来,要么jsonURLs自己编组到 json:jsonText,_:=json.Marshal(jsonURLs)return c.Render(http.StatusOK, "docs/index", map[string]interface{}{        "source":   source,        "key":      key,        "pageType": "docs",        "jsonURLs": string(jsonText),    })第二:看起来你没有导出DocsURL结构的成员字段。将字段名称大写并添加 json 标签。type DocsURL struct {  URL string `json:"url"`  Name string `json:"name"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go