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 定义的详细内容,更多请关注编程网其它相关文章!