Restful项目小结
一、项目简介
本次项目我们实现的是复制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!")
}
}