《使用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)

相关推荐
被摘下的星星7 小时前
Go的命名规则
golang
布朗克1689 小时前
Go 入门到精通-08-复合类型之数组与切片
开发语言·后端·golang·数组与切片
赫媒派11 小时前
Gin 12年零破坏API,架构哲学如何练成?
后端·go·gin
geovindu13 小时前
go:Timing Functions Pattern
开发语言·后端·设计模式·golang·计时函数模式·性能分析模式
迷茫运维路1 天前
Go泛型学习
golang·泛型
apocelipes2 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
何以解忧,唯有..17 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
踏着七彩祥云的小丑17 天前
Go学习第9天:并发编程 + 文件操作 + 正则表达式
学习·golang·正则表达式·go
JCGKS17 天前
Go `init` 函数:包初始化顺序到底是怎样的
golang·init·init执行顺序