go的http框架:设计与实现 | 青训营

64 阅读2分钟

课程 总结

中间件框架,位于业务层和路由层之间,承担着登录认证,延迟负载,日志记录,性能调优等自定义功能,对于用户发来的请求可编译业务逻辑。

http渊源

HTTP协议简单介绍, HTTP1时代,队头阻塞/传输效率低/明文传输不安全
HTTP2,多路复用/头部压缩/使用二进制协议
新的QUIC协议 使用udp协议/解决了对头阻塞的问题/支持快速启动/加密减少握手次数

Restful API

RESTful API是一种基于HTTP协议的设计风格,用于构建可扩展和易于维护的网络服务。它遵循一组规范和约定,使得客户端和服务器之间的通信变得简单和统一 。
五点特征
http动词表示操作:
/////////////////////gin使用restful API开发原则,常见的即为get post,put ,delete,目前开发更倾向于仅仅使用post,因此不再介绍其他restful API,如connect,trace,patch等等

url路径表示资源

HTTP状态码表示操作结果

使用HTTP头部传递额外的信息

使用JSON或XML格式传输数据

gin框架的使用

gin基于golang开发,作为目前第一popular,简单易上手,封装明确。使用gin部署,可省去团队编码规范的时间。以下介绍gin的核心和基础操作Context,

然而,如果没有例子,只是纸上谈兵,白日焰火。一个好的生意家将会编故事,一个好的程序员会写测试用例。下面拆解到项目中的部分代码来解释:

func Authentication() gin.HandlerFunc {
   return func(c *gin.Context) {
       tokenString := c.Query("token")
       userID, err := utils.ValidateToken(tokenString)
       if err != nil {
           c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"})
           c.Abort()  // 验证不通过,阻止API处理函数继续执行
           return
       }

这里的gin context方法,就是根据上下文返回一个 token 验证它的和有效性。此外还声明HTTP头部为authentication类型,假如验证不通过,将返回json文件报出error错误: Invalid token。

func main() {
    r := gin.Default()
    r.POST("/login", func(c *gin.Context) {
        username := c.PostForm("username") // 获取username表单字段的值,例如:"admin"
        password := c.PostForm("password") // 获取password表单字段的值,例如:"123456"
        c.JSON(200, gin.H{
            "message": "登录成功",
            "username": username,
            "password": password,
        })
    })
    r.Run(":8080") // 监听8080端口
}

处理表单提交