gofly接口入参验证使用介绍

接口传入的参数做相关性质验证是开发中较为常用,gofly框架内置校验工具,提供开发效率,开发接口简单调用即可实现验证,下面介绍gofly框架数据验证设计思路及使用方法。

gofly框架提供了功能强大、使用便捷、灵活易扩展的数据/表单校验组件,由gvalid组件实现。gvalid组件实现了非常强大的数据校验功能,内置了数十种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验、自定义校验规则注册、支持struct tag规则及提示信息绑定等等特性,是目前功能最强大的Go数据校验模块。

如果想增加或修改验证规则utils/tools/gvalid/internal目录下添加会修改。验证提示多语言数据在resource\locale目录下,例如中文(zh-CN)、英文(en-US)。多语言我们采用前后端同步方式,由前端决定语种,根据前端当前语言在请求时向接口提交当前设置语言参数,这样后端就可以和前端保持同一语言,前后端提示语言同步设置如下图前端:

1.检验规则示例:

Data()传入检验数据,Locale()传入检验提示语言。

Go 复制代码
//验证规则
	type BizReq struct {
		Account   string `v:"bail|required|length:6,16|same:QQ"`
		QQ        string
		Password  string `v:"required|same:Password2"`
		Password2 string `v:"required"`
	}
	var (
		req = BizReq{
			Account:   "gf",
			QQ:        "123456",
			Password:  "Gofly23",
			Password2: "gofly23",
		}
	)
	if err := gf.Validator().Data(req).Locale("en-US").Run(c); err != nil {
		fmt.Println("英文", err)
	}
	if err := gf.Validator().Data(req).Locale("zh-CN").Run(c); err != nil {
		fmt.Println("中文", err)
	}

2.接口中对前端传入参数验证并数据入库操作示例:

示例中是对的account验证为(1)必传,(2)长度为6到16之间,(3)传入值的qq参数值一样。password和password2必传并且两个值一致。

Go 复制代码
// 测试入参验证
func (api *Index) SaveVeriApi(c *gf.GinCtx) {
	//获取传参
	param, _ := gf.RequestParam(c)
	//验证规则
	rules := map[string]string{
		"account":   "bail|required|length:6,16|same:qq",
		"password":  "required|same:password2",
		"password2": "required",
	}
	if err := gf.Validator().Rules(rules).Data(param).Locale(c.Request.Header.Get("locale")).Run(c); err != nil {
		gf.Failed().SetMsg(err.String()).Regin(c)
		return
	}
	res, err := gf.Model("user").Data(param).Save()
	if err != nil {
		gf.Failed().SetMsg("错误").SetData(err).Regin(c)
	} else {
		gf.Success().SetMsg("添加成功").SetData(res).SetExdata(param).Regin(c)
	}
}
2.1传入参数:
javascript 复制代码
{
  account:gf,
  qq:123456,
  password:Gofly23,
  password2:gofly23,
  locale:cn,
}
2.2返回提示:
javascript 复制代码
{
    "code": 1,
    "data": false,
    "exdata": null,
    "message": "password字段值`Gofly23`必须和password2字段值`gofly23`相同; account字段值`gf`字段长度应当为6到16个字符",
    "time": 1708557872337,
    "token": ""
}

方法中校验规则:校验规则使用文档 了解更多。

相关推荐
于顾而言11 小时前
【笔记】Go Coding In Go Way
后端·go
qq_1728055911 小时前
GIN 反向代理功能
后端·golang·go
follycat17 小时前
2024强网杯Proxy
网络·学习·网络安全·go
OT.Ter20 小时前
【力扣打卡系列】单调栈
算法·leetcode·职场和发展·go·单调栈
探索云原生21 小时前
GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU
ai·云原生·kubernetes·go·gpu
OT.Ter1 天前
【力扣打卡系列】移动零(双指针)
算法·leetcode·职场和发展·go
码财小子1 天前
k8s 集群中 Golang pprof 工具的使用
后端·kubernetes·go
明月看潮生5 天前
青少年编程与数学 02-003 Go语言网络编程 04课题、TCP/IP协议
青少年编程·go·网络编程·编程与数学
明月看潮生5 天前
青少年编程与数学 02-003 Go语言网络编程 03课题、网络编程协议
青少年编程·go·网络编程·编程与数学
帅气的人1236 天前
thrift idl 语言基础学习
java·开发语言·python·rpc·go·thrfit