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数据库
  • 功能拆分
  • 自定义配置
  • 自用模板生成
RK
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章