当前位置:网站首页>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数据库 功能拆分 自定义配置 自用模板生成
边栏推荐
- Design for failure常见的12种设计思想
- C陷阱与缺陷 第4章 链接 4.3 命名冲突与static修饰符
- 全国双非院校考研信息汇总整理 Part.7
- 新标杆!美创科技助力广西桂林某三甲医院实现勒索病毒主动防御
- [leetcode] 75. Color classification (medium) (double pointer, in-situ modification)
- 信用卡又一新规来袭!菊风用科技助推金融行业提升服务质效
- DNA修饰碳纳米管|DNA修饰单层二硫化钼|DNA修饰二硫化钨(注意事项)
- 能源企业数字化转型背景下的数据安全治理实践路径
- 子无序测试
- esp12f + tft 显示图片问题
猜你喜欢
随机推荐
重写并自定义依赖的原生的Bean方法
Tkinter:功能按钮Button
High - level - the rest - the client determine whether indexes exist
devops学习(六)Jenkins 持续部署-版本选择
JSON.parseObject 带泛型告警
Analysis of miscellaneous diseases such as DNS domain name hijacking in instant messaging mobile terminal development
MQTT over QUIC: The Next-Generation IoT Standard Protocol Brings New Impetus to Messaging Scenarios
Single chip ds1302 clock program (51 single chip liquid crystal display program)
MySQL事务隔离级别详解
In 2022, the latest Gansu construction staff (material staff) mock exam questions and answers
Another new rule for credit cards is coming!Juphoon uses technology to boost the financial industry to improve service quality and efficiency
【openlayers】Map【1】
资源集合
环形链表(LeetCode 141、142)
树莓派上安装 wiringPi 2.6 解决 gpio readall 命令的错误
logback过期日志文件自动删除
Jsp使用&lt;c:forEach&gt;遍历List集合「建议收藏」
全国双非院校考研信息汇总整理 Part.2
C陷阱与缺陷 第4章 链接 4.5 检查外部类型
Brute force recursion to dynamic programming 04 (digital string conversion)