RK-BOOT 框架实战(1)
rk-boot 框架能够通过yaml配置文件的形式快速启动流行的代码框架。适用于Gin,Fiber,Zero等代码框架。
1. rk-boot框架的优点和存在的必要型
以Gin 框架为例。
rk-boot是在各种流行的框架的基础之上进行了相关的封装。当然如果自己在开发的同时,也能够实现这种封装的功能。这些功能包款Database的初始化,JWT的相关配置,以及系统日志的记录,以及Swagger相关文档的生成配置登。rk-boot中完美的将这些功能集成子啊yaml文件中,并实现了系统开发的可插拔的特性。让用户不用过多的将精力放在功能的初始化操作中,让使用者更多的关注系统中业务逻辑的开发。
1.1 优点(官方文档)
- 通过rk-boot, 能够构建企业级的项目;
- 通过rk-boot, 自动添加企业级别日志,监控,调用链,权限到服务器中;
- 通过rk-boot, 快速切换到核心依赖;
- 通过rk-boot, 节约开源框架的复杂学习过程;
- 自定义Entry。
1.2 内置插件
rk-boot,除了封装了流行的框架外,还提供了database,CORS,zap等插件。
而这些插件的使用,仅仅是通过配置文件 boot.yaml 就可以启用。
2. 快速启动Web服务
2.1 实现的功能
- api文档的生成(swagger)
- api服务生成
2.2 实践
- 创建boot.yaml 文件
- 创建main.go文件
- 生成api文档
- 请求api
2.2.1 创建boot.yaml配置文件
gin: - name: greeter port: 8080 # 监听端口 enabled: true # 开启 gin 微服务 sw: enabled: true # 开启 Swagger UI,默认路径为 /sw docs: enabled: true # 开启 API Doc UI,默认路径为 /docs prom: enabled: true # 开启 Prometheus 客户端,默认路径为 /metrics middleware: logging: enabled: true # 开启 API 日志中间件 prom: enabled: true # 开启 API Prometheus 中间件 meta: enabled: true # 开启 API 原数据中间件,自动生成 RequestID
2.2.2 创建main.go文件
package mainimport ( "context" "fmt" "github.com/gin-gonic/gin" "github.com/rookie-ninja/rk-boot/v2" "github.com/rookie-ninja/rk-gin/v2/boot" "net/http")// @title Swagger Example API// @version 1.0// @description This is a sample rk-demo server.// @termsOfService http://swagger.io/terms/// @securityDefinitions.basic BasicAuth// @contact.name API Support// @contact.url http://www.swagger.io/support// @contact.email support@swagger.io// @license.name Apache 2.0// @license.url http://www.apache.org/licenses/LICENSE-2.0.htmlfunc main() { boot := rkboot.NewBoot() // 注册 API entry := rkgin.GetGinEntry("greeter") entry.Router.GET("/v1/greeter", Greeter) // 启动 boot.Bootstrap(context.TODO()) // 等待关闭信号 boot.WaitForShutdownSig(context.TODO())}// Greeter handler// @Summary Greeter// @Id 1// @Tags Hello// @version 1.0// @Param name query string true "name"// @produce application/json// @Success 200 {object} GreeterResponse// @Router /v1/greeter [get]func Greeter(ctx *gin.Context) { ctx.JSON(http.StatusOK, &GreeterResponse{ Message: fmt.Sprintf("Hello %s!", ctx.Query("name")), })}type GreeterResponse struct { Message string}
2.2.3 生成api接口文档
swag init
2.2.4 运行服务
$ go run main.go2022-04-14T01:09:52.073+0800 INFO boot/gin_entry.go:656 Bootstrap GinEntry {"eventId": "432fcdfb-05e8-46a4-b7b2-d6b6967eba88", "entryName": "greeter", "entryType": "GinEntry"}2022-04-14T01:09:52.074+0800 INFO boot/gin_entry.go:413 SwaggerEntry: http://localhost:8080/sw/2022-04-14T01:09:52.074+0800 INFO boot/gin_entry.go:416 DocsEntry: http://localhost:8080/docs/2022-04-14T01:09:52.074+0800 INFO boot/gin_entry.go:419 PromEntry: http://localhost:8080/metrics------------------------------------------------------------------------endTime=2022-04-14T01:09:52.074233+08:00startTime=2022-04-14T01:09:52.073337+08:00elapsedNano=896392timezone=CSTids={"eventId":"432fcdfb-05e8-46a4-b7b2-d6b6967eba88"}app={"appName":"rk","appVersion":"local","entryName":"greeter","entryType":"GinEntry"}env={"arch":"amd64","domain":"*","hostname":"lark.local","localIP":"192.168.101.5","os":"darwin"}payloads={"docsEnabled":true,"docsPath":"/docs/","ginPort":8080,"promEnabled":true,"promPath":"/metrics","promPort":8080,"swEnabled":true,"swPath":"/sw/"}counters={}pairs={}timing={}remoteAddr=localhostoperation=BootstrapresCode=OKeventStatus=EndedEOE
2.2.5 验证
- Swagger UI Api文档#http://localhost:8080/sw/
- 发送请求
$ curl -vs "localhost:8080/v1/greeter?name=rk-dev"* ...< X-Request-Id: 7120529c-893b-4caa-a425-bc268de5cbc0< X-Rk-App-Domain: *< X-Rk-App-Name: rk< X-Rk-App-Unix-Time: 2022-04-15T03:37:22.848829+08:00< X-Rk-App-Version: local< X-Rk-Received-Time: 2022-04-14T01:18:39.013447+08:00< ...{"Message":"Hello rk-dev!"}
上述的过程直接可以参考官方文档进行详细的查看
3. 总结
本篇文章主要介绍了rk-boot 框架,并结合Gin框架进行了简单使用。下篇文章中,将会针对业务需求,进行代码的优化,针对如下几块进行实战:
- 使用Mysql数据库
- 功能拆分
- 自定义配置
- 自用模板生成