構建驗證器主要整合了`JSON`解析和用戶請求參數的驗證封裝在`requests`目錄下,理論上每個`控制器`都需要對應一個`驗證器`來實現安全的參數讀取。
**任何時候都不能相信用戶發送過來的請求。**
這個 Web 開發的黃金法則。
## Govalidator
驗證規則紛繁復雜,沒必要去從零開始寫一個驗證器。Go 社區已經有很多現成的方案可供選擇。
系統將選用[github.com/thedevsaddam/govalidato...](https://github.com/thedevsaddam/govalidator)來作為請求驗證的基礎包。它除了擁有豐富的驗證規則外,還支持自定義規則和自定義錯誤消息,滿足我們的需求。
## 驗證器
一個簡單的查詢用戶列表的驗證器如下:
```
package requests
import (
"github.com/gin-gonic/gin"
"github.com/thedevsaddam/govalidator"
)
// 請求參數
type PaginationRequest struct {
Sort string `valid:"sort" form:"sort"`
Order string `valid:"order" form:"order"`
PerPage string `valid:"per_page" form:"per_page"`
}
func Pagination(data interface{}, c *gin.Context) map[string][]string {
rules := govalidator.MapData{
"sort": []string{"in:id,created_at,updated_at"},
"order": []string{"in:asc,desc"},
"per_page": []string{"numeric_between:2,100"},
}
messages := govalidator.MapData{
"sort": []string{
"in:排序字段僅支持 id,created_at,updated_at",
},
"order": []string{
"in:排序規則僅支持 asc(正序),desc(倒序)",
},
"per_page": []string{
"numeric_between:每頁條數的值介于 2~100 之間",
},
}
return validate(data, rules, messages)
}
```
在控制器中使用它也是非常簡單的:
```
// Index 查詢Users列表(分頁)
func (this *UsersController) Index(c *gin.Context) {
// 驗證請求參數
request := requests.PaginationRequest{}
if ok := requests.Validate(c, &request, requests.Pagination); !ok {
// 驗證失敗
return
}
response.ShowSuccess(c, "操作成功!")
}
```
可以看到我們這里是直接用驗證器接受了用戶請求參數并綁定到`struct`對象。
- 序言
- 基礎
- 安裝GoHub
- 目錄結構
- 開發規范
- 部署項目
- 架構
- 架構總覽
- 生命周期
- 配置
- 配置介紹
- 配置目錄
- 配置格式
- 配置加載
- 讀取配置
- 動態配置
- 環境變量配置
- 路由
- 路由模式
- 路由定義
- 路由參數
- 路由分組
- 路由限流
- 路由拆分
- 控制器
- 控制定義
- 控制器初始化
- 中間件
- Make創建控制器
- 請求
- 請求信息
- 數據庫
- 連接數據庫
- 基本使用
- Make創建模型
- 日志
- 介紹
- 日志驅動
- 日志寫入
- HTTP日志
- 數據庫請求日志
- 錯誤和調試
- Debuger調試器
- 驗證
- 驗證器
- 驗證規則
- Make創建驗證器
- 雜項
- 緩存
- 分頁
- 驗證碼
- CURL請求
- 命令行
- 基礎知識
- console 包
- Cobra 基礎
- 命令行模式
- 附錄
- 配置參考
- 第三方依賴庫