目前我们使用go-kratos做微服务的实战项目已形成了雏形。在java 开发微服务的时候,我们经常会使用到swagger或者Knife4j等第三方框架,让我们的项目里面自动集成接口文档,这样可以省下很多我们的开发工作。那么在go里面是否也有这样的第三方框架的呢?
其实是有的,在go-kratos中可以直接集成swagger,这样子项目启动起来之后,就会自动生成swagger接口文档,并且使用起来比java简单的太多了。下面咱们来演示下。
一、安装依赖
这里要在go-kratos中集成swagger,肯定是需要安装第三方依赖的,这里涉及到的依赖主要有:
go get github.com/go-kratos/swagger-api/openapiv2 go get github.com/go-kratos/swagger-api
这两个依赖是在go-kratos中使用swagger的核心。
二、注入中间件
这里使用swagger的话,主要是通过中间件来实现的,由于go-kratos同时支持http和grpc,swagger属于http的,所以这里我们需要在internal/server/http.go里面注入中间件即可,打开internal/sever/http.go文件,在NewHTTPServer方法中添加如下的代码:
handler := openapiv2.NewHandler() srv.HandlePrefix("/q/", handler)
完成以上两步,我们的在go-kratos微服务中集成swagger就完成了。
三、启动测试
最后把项目启动起来,访问http端口,路径带上/q/swagger-ui即可,示例:
http://localhost:8000/q/swagger-ui
就可以看到完整的swagger接口文档了:
备注:
1、前面我们在编写案例的时候,在account.proto文件中编写login的时候接口前少写了一个/,如果按照上面的方法添加的话,会发现accout相关的swagger 会报错,所以这里需要把account.proto文件的url路径添加一个/,再重新编译pb文件。swagger就正常了。
2、添加了swagger之后,整个项目使用kratos run命令启动项目需要比较长的时间,需要等待一会。
3、实际生产环境中,一般我们的要求是不允许使用swagger(每个公司,每个团队的情况不一样,视实际情况而定),因为可能会涉及到接口泄露的问题及增加资源消耗。虽然swagger用起来很方便,但是在实际情况中其实还是有很多顾虑的。
最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...