首页 > 后端开发 > Golang > 正文

无法使用 go-openapi/runtime/middleware 加载 API 定义

王林
发布: 2024-02-13 21:00:22
转载
1142 人浏览过

无法使用 go-openapi/runtime/middleware 加载 API 定义

php小编香蕉在开发过程中,有时会遇到一个问题:无法使用 go-openapi/runtime/middleware 加载 API 定义。这个问题可能会影响到项目的正常进行,因此需要及时解决。在解决这个问题之前,我们需要了解一下 go-openapi/runtime/middleware 是什么,以及为什么会出现无法加载 API 定义的情况。在本文中,我们将详细解释这个问题的原因,并提供解决方案,帮助大家顺利解决这个困扰。

问题内容

我正在使用 golang 的 http/net 以及 github.com/go-openapi/runtime/middleware 来探索 go 中的 swagger。使用以下代码:

func setupandrunhttpserver() {
    httpport := envstring("http_port", defaulthttpport)
    httpaddr := net.joinhostport("localhost", httpport)
    service := planting.newplantingservice()
    eps := endpoints.newendpointset(*service)
    httpservermux := transport.newhttphandler(eps)

    // setup the swagger docs and ui.
    var sh http.handler = middleware.swaggerui(middleware.swaggeruiopts{}, nil)
    httpservermux.handle("/docs", sh)

    // the http listener mounts the go kit http handler we created.
    httplistener, err := net.listen("tcp", httpaddr)
    if err != nil {
      os.exit(1)
    }

    // serve using the net/http.servermux creaded in transport package.
    err = http.serve(httplistener, httpservermux)
    if err != nil {
      os.exit(2)
    }
    defer httplistener.close()
  }
登录后复制

当我访问 http://localhost:8088/docs 时,我得到以下信息:

乍一看,net/http 库以及 middleware 无法找到相对于服务器根目录的 swagger.json 文件。我将该文件位于:

matthew.hoggan in ~/go/src/project/root on TemplateServer*
⚡ ls -l ./docs/swagger.json
-rw-r--r--  1 matthew.hoggan  staff  3880 Nov 30 04:47 ./docs/swagger.json
登录后复制

我的问题是,在部署克隆项目之前测试克隆项目时,如何告诉 middleware 在当前目录中哪里可以找到 swagger.json

解决方法

从源代码看来,您需要执行以下操作:

var sh http.Handler = middleware.SwaggerUI(middleware.SwaggerUIOpts{SpecURL: "./docs/swagger.json"}, nil)
登录后复制

如果未指定 specurl,则默认为: /swagger.json

以上是无法使用 go-openapi/runtime/middleware 加载 API 定义的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板