zoukankan      html  css  js  c++  java
  • 技术博客总结

    技术博客总结

    技术概述

    Gin 是一个用 Go (Golang) 编写的 web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架,由于 httprouter,速度提高了近 40 倍。 如果你是性能和高效的追求者,你会爱上 Gin.

    技术详述

    1. 准备工作

      添加依赖

      module my-mod
      
      go 1.14
      
      require (
      	github.com/gin-gonic/gin v1.7.1
      )
      
    2. 支持中间件

      简介:传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 例如:Logger,Authorization,GZIP等

      使用:在除了登录、刷新token以及获取公共数据之外的API,其它大部分API都需要通过token以验证用户身份(authorization),且验证逻辑都相同,故可以通过中间件中统一处理

      func GetTokenWare(c *gin.Context) {
      	token := c.GetHeader("Authorization")
      	if code, clientId, err := util.DecodeToken(token); code != e.Success {
      		if err != nil {
      			log.Println("verify token", err)
      		}
      		util.JSON(c, code, gin.H{})
      		c.Abort()
      	} else {
      		cid, _ := strconv.Atoi(clientId)
      		c.Set("client_id", cid)
      		c.Next()
      	}
      }
      
    3. 支持路由组

      简介:更好地组织路由。不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。

      使用:通过路由组来集中管理api版本与需要上述认证中间件的路由

      func InitRouter() *gin.Engine {
      	gin.SetMode(setting.RunMode)
      	r := gin.Default()
      	apiV1 := r.Group("/api")
      	{
      		apiV1.POST("/client/bind", api.Login)
      		apiV1.GET("/code2token", api.Code2Token)
      		apiV1.GET("/project/list", api.GetProjectList)
              // authorization路由分组,并对于该分组所有路由使用authorization路由分组中间件
      		tokenGroup := apiV1.Group("/").Use(middleware.GetTokenWare)
      		{
      			tokenGroup.GET("/client/profile", api.GetClientProfile)
      			tokenGroup.GET("/client/info", api.GetClientInfo)
      			tokenGroup.GET("/client/reward", api.GetClientReward)
      			tokenGroup.POST("/client/update/political", api.UpdateClientPolitical)
      			tokenGroup.GET("/project/detail", api.GetDetail)
      			tokenGroup.POST("/project/sign", api.SignProject)
      			tokenGroup.GET("/client/project/list", api.GetClientOptionInfo)
      			tokenGroup.POST("/project/feedback/img", api.UploadFeedbackImage)
      			tokenGroup.POST("/project/feedback", api.PostFeedback)
      		}
      	}
      	return r
      }
      
      
    4. 支持JSON验证

      简介:Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。

      func UpdateClientPolitical(c *gin.Context) {
      	code := e.Success
      	data := gin.H{}
      	clientId := c.MustGet("client_id").(int)
      
      	param := struct {
              Political int `json:"political" binding:"required"` // json标签指定了json字段的key,binding标签指定该key必须存在
      	}{}
          // 验证json,比如若political key不存在,那么err != nil为真
      	if err := c.ShouldBindJSON(&param); err != nil {
      		code = e.InvalidParams
      	} else {
      		model.UpdateClientPolitical(clientId, param.Political)
      	}
      
      	util.JSON(c, code, data)
      }
      
    5. 流程图

    问题和解决过程

    总结

    第一次真正接触go语言和gin框架,感觉用起来还是很舒服很简单的,没想象中的那样困难,可能这就是语言和框架的设计艺术吧,使得底层原理对程序员透明化,而且这个语言和框架都很热门,遇到问题都很容易能通过查找资料解决。

    参考

    https://github.com/gin-gonic/gin

  • 相关阅读:
    整理了8个Python中既冷门又实用的技巧
    python中68个内置函数的总结
    Python中常见的8种数据结构的实现方法(建议收藏)
    python基础教程:dir()和__dict__属性的区别
    Python 优雅获取本机 IP 方法
    Python类中的self到底是干啥的
    python中反转列表的三种方式
    Flask学习笔记(2)-login_page
    利用Flask + python3.6+MYSQL编写一个简单的评论模块。
    最近写了个自动填写调查的问卷的简单爬虫
  • 原文地址:https://www.cnblogs.com/nosae/p/14943872.html
Copyright © 2011-2022 走看看