网络知识 娱乐 RK-BOOT 框架实战

RK-BOOT 框架实战

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数据库
  • 功能拆分
  • 自定义配置
  • 自用模板生成