• gofly框架接口入参验证使用介绍


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

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

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

    1.检验规则示例:

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

    1. //验证规则
    2. type BizReq struct {
    3. Account string `v:"bail|required|length:6,16|same:QQ"`
    4. QQ string
    5. Password string `v:"required|same:Password2"`
    6. Password2 string `v:"required"`
    7. }
    8. var (
    9. req = BizReq{
    10. Account: "gf",
    11. QQ: "123456",
    12. Password: "Gofly23",
    13. Password2: "gofly23",
    14. }
    15. )
    16. if err := gf.Validator().Data(req).Locale("en-US").Run(c); err != nil {
    17. fmt.Println("英文", err)
    18. }
    19. if err := gf.Validator().Data(req).Locale("zh-CN").Run(c); err != nil {
    20. fmt.Println("中文", err)
    21. }

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

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

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

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

  • 相关阅读:
    GBase 8c 数据库审计概述(二)
    选择适合户外篷房企业的企业云盘解决方案
    中秋节快乐--祝诸佬们今后月来月靓
    linux下grep命令使用总结
    springboot基于微信小程序“智慧校园” 一体式的设计与实现毕业设计源码091634
    擎创技术流 | ClickHouse管理工具—ckman教程(2)ClickHouse集群
    UE5学习(游戏存档,两种适应性的射线检测,时间膨胀)
    golang 装饰器模式详解
    面试打底稿④ 专业技能的第四部分
    AQS之ReentrantReadWriteLock分析 (九)
  • 原文地址:https://blog.csdn.net/qq_23731311/article/details/136424143