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中文网其他相关文章!