设为首页 加入收藏

TOP

[系列] Gin 框架 - 安装和路由配置(二)
2019-07-25 14:17:30 】 浏览:246
Tags:系列 Gin 框架 安装 路由 配置
) - ts >= exp { RetJson("500", "Ts Error", "", c) return } // 验证签名 if sn == "" || sn != CreateSign(req) { RetJson("500", "Sn Error", "", c) return } }

生成签名的方法:

// 生成签名
func CreateSign(params url.Values) string {
    var key []string
    var str = ""
    for k := range params {
        if k != "sn" {
            key = append(key, k)
        }
    }
    sort.Strings(key)
    for i := 0; i < len(key); i++ {
        if i == 0 {
            str = fmt.Sprintf("%v=%v", key[i], params.Get(key[i]))
        } else {
            str = str + fmt.Sprintf("&%v=%v", key[i], params.Get(key[i]))
        }
    }
    // 自定义签名算法
    sign := MD5(MD5(str) + MD5(config.APP_NAME + config.APP_SECRET))
    return sign
}

获取参数的方法:

// 获取 Get 参数
name := c.Query("name")
price := c.DefaultQuery("price", "100")

// 获取 Post 参数
name := c.PostForm("name")
price := c.DefaultPostForm("price", "100")

// 获取 Get 所有参数
ReqGet = c.Request.URL.Query()

//获取 Post 所有参数
ReqPost = c.Request.PostForm

v1 业务代码:

package v1

import "github.com/gin-gonic/gin"

func AddProduct(c *gin.Context)  {
    // 获取 Get 参数
    name  := c.Query("name")
    price := c.DefaultQuery("price", "100")

    c.JSON(200, gin.H{
        "v1"    : "AddProduct",
        "name"  : name,
        "price" : price,
    })
}

v2 业务代码:

package v2

import (
    "github.com/gin-gonic/gin"
)

func AddProduct(c *gin.Context)  {
    // 获取 Get 参数
    name  := c.Query("name")
    price := c.DefaultQuery("price", "100")

    c.JSON(200, gin.H{
        "v1"    : "AddProduct",
        "name"  : name,
        "price" : price,
    })
}

接下来,直接看效果吧。

访问 v1 接口:

访问后,直接返回数据,不走签名验证。

访问 v2 接口:

进入了这段验证:

// 验证过期时间
if ts > GetTimeUnix() || GetTimeUnix() - ts >= exp {
    RetJson("500", "Ts Error", "", c)
    return
}

修改为合法的时间戳后:

进入了这段验证:

// 验证签名
if sn == "" || sn != CreateSign(req) {
    RetJson("500", "Sn Error", "", c)
    return
}

修改为合法的签名后:

至此,简单的路由配置已经实现了。

对了,还有一个点没说,就是如何读取配置文件中的配置,我是这样做的:

package config

const (
    PORT       = ":8080"
    APP_NAME   = "ginDemo"
    APP_SECRET = "6YJSuc50uJ18zj45"
    API_EXPIRY = "120"
)

引入 config 包,直接 config.xx 即可。

推荐阅读

Gin 框架

基础篇

本文欢迎转发,转发请注明作者和出处,谢谢!

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇go 语言学习笔记 下一篇[系列] Gin 框架 - 使用 logrus ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目