Restful项目小结

Restful项目小结

文章目录

    • Restful项目小结
      • 一、项目简介
      • 二、boltDB使用
        • 比较:
        • 读写:
        • 可视化工具:
      • 三、JWT使用
        • jwt的go工具
        • Token结构:
        • JWT使用

一、项目简介

本次项目我们实现的是复制swapi这个网站,我负责的主要是后端部分:

数据库的部分(boltDB)还有jwt的部分。

项目地址:swapi项目

二、boltDB使用

比较:

相比之前学过的Mysql和oracle,boltDB数据库没有行、列的属性,这使得boltDB更为轻量,但是获取数据的手段就少了些(使用键值对来获取数据)。

读写:

读写函数是boltDB.Update():

err = boltDB.Update(func(tx *bolt.Tx) error {
		user := tx.Bucket([]byte("Users"))
		// store user info
		newEntity := &User {
			Username : name,
			Password : pass,
			Email : email,
		}
		jsonStr, err := json.Marshal(newEntity)
		if err != nil {
			return err
		}
		return user.Put([]byte(name), jsonStr)
	})

只读函数是boltDB.View():

err = boltDB.View(func(tx *bolt.Tx) error {
		bkt := tx.Bucket([]byte("Users"))
		userInfo = bkt.Get([]byte(name))
		return err
	})

可视化工具:

一开始我们使用boltDB没有可视化工具,所以检查代码是否执行成功很麻烦,可视化工具便于检查提交保存数据是否成功。但是boltDB没有相对官方的可视化工具,以下有两个比较好的可视化脚本:

命令行工具

网页工具

三、JWT使用

jwt的go工具

在线工具和语言包工具

Token结构:

  • header(头部)
  • payload(数据)
  • signature(签名)

JWT使用

func ValidateTokenMiddleware(w http.ResponseWriter, r *http.Request) (bool, []byte) {
    token, err := request.ParseFromRequest(r, request.AuthorizationHeaderExtractor,
        func(token *jwt.Token) (interface{}, error) {
            return []byte(SecretKey), nil
        })

    if err == nil {
        if token.Valid {
        	claims := token.Claims.(jwt.MapClaims)
        	if claims["username"] == nil {
        		return false, []byte("Token InValid! Please use new Token Type!")
        	}
        	if controller.IsValid(claims["username"].(string)) {
        		return true, []byte("Token Valid!")
        	} else {
        		return false, []byte("Token Invalid!")
        	}
        } else {
            return false, []byte("Token Invalid!")
        }
    } else {
        return false, []byte("Token Invalid!")
    }
}

你可能感兴趣的:(Restful项目小结)