当前位置:网站首页>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数据库 功能拆分 自定义配置 自用模板生成
边栏推荐
- MQTT over QUIC: The Next-Generation IoT Standard Protocol Brings New Impetus to Messaging Scenarios
- 卧槽,2行代码,让接口性能提升10倍
- Another new rule for credit cards is coming!Juphoon uses technology to boost the financial industry to improve service quality and efficiency
- 2022年最新甘肃建筑施工焊工(建筑特种作业)模拟题库及答案解析
- Foxmail是什么邮箱?
- 乐理&吉他技巧
- Huawei 14 Days - (3) Kernel Development
- [2023 School Recruitment Questions] Summary of Common Interview Questions (7. Common Bus Protocols) (Continuously updated with subsequent interviews....)
- C陷阱与缺陷 第4章 链接 4.5 检查外部类型
- labview怎么做成应用程序(labview程序识别形状)
猜你喜欢

windows下 PHP 安装

The latest Gansu construction welder (construction special operation) simulation question bank and answer analysis in 2022

Guidelines for the Release of New WeChat Mini Programs

devops学习(七) sonarqube 代码质检工具

Qt uses QSortFilterProxyModel for sorting and filtering in QML

DFS对树的遍历及一些优化

学会使用MySQL的Explain执行计划,SQL性能调优从此不再困难

devops学习(四) Jenkins CI 持续集成

Framework 到底该怎么学习?

Design for failure常见的12种设计思想
随机推荐
软件测试拿8k以上有多简单,掌握这些随随便便拿8k以上...
高数下|三重积分的计算3|高数叔|手写笔记
C语言初阶-初识C语言
JSON.parseObject 带泛型告警
Qt之在QML中使用QSortFilterProxyModel进行排序和过滤
暴力递归到动态规划 04 (数字字符串转化)
Apache Doris 1.1 特性揭秘:Flink 实时写入如何兼顾高吞吐和低延时
LabVIEW为什么在存储VI时死机
USACO2008通信线路
ApplicationContext的三大实现
[leetcode] 75. Color classification (medium) (double pointer, in-situ modification)
Android 11 : 隐私和安全
1326. 灌溉花园的最少水龙头数目 动态规划
C陷阱与缺陷 第4章 链接 4.2 声明与定义
Install PyCharm on Raspberry Pi
[leetcode] 80. Delete duplicates in sorted array II (medium) (double pointer, in-place modification)
Brute force recursion to dynamic programming 03 (knapsack problem)
全国双非院校考研信息汇总整理 Part.7
WeChat applet sliding navigation bar (how to set the floating window of the webpage)
SAP UI5 FileUploader 的隐藏 iframe 设计明细