当前位置:网站首页>rk-boot框架实战(1)
rk-boot框架实战(1)
2022-07-29 23:31:00 【raymondyShan】
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 main
import (
"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 [email protected]
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
func 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.go
2022-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:00
startTime=2022-04-14T01:09:52.073337+08:00
elapsedNano=896392
timezone=CST
ids={"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=localhost
operation=Bootstrap
resCode=OK
eventStatus=Ended
EOE
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数据库 功能拆分 自定义配置 自用模板生成
边栏推荐
- DNA修饰纳米金颗粒|DNA脱氧核糖核酸偶联修饰碳纳米材料|实验原理
- JetsonNano learning (6) Big pits and solutions that Jetson stepped on___Continuously updated
- We launched a "developer lab"
- C语言初阶-初识C语言
- C陷阱与缺陷 第4章 链接 4.4 形参、实参与返回值
- 标签分发协议(LDP)
- [leetcode] 82. Delete duplicate elements in sorted linked list II (medium)
- Redis系列:高可用之Sentinel(哨兵模式)
- Apache Doris 1.1 特性揭秘:Flink 实时写入如何兼顾高吞吐和低延时
- MySQL active/standby switch
猜你喜欢
随机推荐
环形链表(LeetCode 141、142)
DFS对树的遍历及一些优化
WIN2008的IIS上下载文件大小限制之修改
容器化 | 在 Rancher 中部署 MySQL 集群
什么是色选机(color sorter)?
High - level - the rest - the client determine whether indexes exist
idea设置自动去除未引用(不再引用)的引用
MySQL六脉神剑,SQL通关大总结
Redis系列:高可用之Sentinel(哨兵模式)
【openlayers】地图【二】
windows下 PHP 安装
容器化数据库必经之道
Gao Shu Xia|Triple Integral Exercises|Uncle Gao Shu|Handwritten Notes
接口测试的概念、目的、流程、测试方法有哪些?
学会使用MySQL的Explain执行计划,SQL性能调优从此不再困难
DNA修饰的上转换纳米材料|聚胞苷酸Poly-C DNA修饰的氧化石墨烯|解析说明
【openlayers】Map【1】
Hell Diggers Series #1
High Numbers|Calculation of Triple Integral 3|Uncle High Numbers|Handwritten Notes
HRNet-Facial-Landmark-Detection 训练自己数据集









