《使用Gin框架构建分布式应用》阅读笔记:p127-p142

《用Gin框架构建分布式应用》学习第9天,p127-p142总结,总计16页。

一、技术总结

1.Authentication方式汇总

(1)API keys

API keys 认证方式示例:

复制代码
func (handler *RecipesHandler) NewRecipeHandler(c *gin.Context) {
	// API-keys 认证
	value := os.Getenv("X-API-KEY")
	log.Println("X-API-KEY in env: ", value)
	if value == "" {
		value = "codists"
	}

	log.Println("X-API-KEY in header:", c.GetHeader("X-API-KEY"))
	if c.GetHeader("X-API-KEY") != value {
		c.JSON(http.StatusUnauthorized, gin.H{"message": "Unauthorized"})
		return
	}
	// 请求参数反序列化
	var recipe models.Recipe
	if err := c.ShouldBindJSON(&recipe); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
	}
	insertionResult, err := handler.collection.InsertOne(handler.ctx, &models.Recipe{})
	if err != nil {
		// 新增失败,返回错误给前端
		c.JSON(http.StatusInternalServerError, gin.H{"message": "新增失败" + err.Error()})
		return
	}

	log.Println("Remove recipes from Redis")
	handler.redisClient.Del(handler.ctx, "recipes")
	// 新增成功,返回 ID
	c.JSON(http.StatusOK, insertionResult.InsertedID)
}

这种方式在本人实际的工作经历中还没有遇到,不过在其它网站中有看到过实际应用。

(2)Basic Auth

(3)Client session

(4)OpenID Connect

(5)OpenAutherization(OAuth) 2.0

2.JWT

关于JWT的介绍可参考RFC7519:https://datatracker.ietf.org/doc/html/rfc7519。书中作者使用的是jwt-go这个包,现在这个包已经archived了,大家转而使用golang-jwt。

3.Gin知识点

(1)router.Group()

二、英语总结

1.pick up

p133,API keys are simple; however, anyone who makes a request to an API transmits their key,and in theory, the key can be picked up easily with a man-in-the-middle (MITM) attack

when no encryption is in use.

vt. to get sth。pick up这个词用法很灵活,感觉在很多场景能使用。

2.depict

p134, A JWT token consists of three parts separated by dots, as depicted in the following

screenshot...

(1)depict: de-("down") + pingere("to paint")。vt. to represent or show sth in a picture(描绘).

三、其它

虽然在使用 Python、Flask的时候使用过 JWT,但是本章阅读起来速度还是比较慢,本质在于对Go语言不熟悉,以及Go开发中使用的框架不熟悉。

四、参考资料

1. 编程

(1) Mohamed Labouardy,《Building Distributed Applications in Gin》:https://book.douban.com/subject/35610349

2. 英语

(1) Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org

欢迎搜索及关注:编程人(a_codists)

相关推荐
比特森林探险记16 小时前
go 语言中的context 解读和用法
开发语言·后端·golang
jieyucx1 天前
从基础语法到面向对象:Go语言如何实现封装、继承与多态?
开发语言·后端·golang
littleschemer1 天前
Go:实现游戏服务器网关
服务器·网关·游戏·golang
念何架构之路1 天前
Go依赖管理
开发语言·后端·golang
必胜刻1 天前
Go 调用Coze工作流实现 AI 游戏生成
开发语言·ai·golang·gin
李燚2 天前
ReAct 循环的 50 行 Go 实现,逐行拆解
javascript·人工智能·react.js·golang·aigc·agent
念何架构之路2 天前
Go pprof性能剖析
开发语言·后端·golang
姚不倒2 天前
Go语言实战:构建一个安全的计算器服务(接口、错误处理与Panic恢复)
云原生·golang
XMYX-03 天前
37 - Go env 环境变量:配置管理与运行时控制
开发语言·golang
比特森林探险记3 天前
context 在 gRPC / Gin / K8s 中的实战
容器·kubernetes·gin