golang实现一个博客的后端服务器
一、简介
这篇文章写的是一个简单博客后端的实现过程,完整代码在github上。
我在这次项目中负责的部分是
- 利用swagger editor生成api文档
- 服务端部署
- 完成user和article的全部功能
二、安装mongodb、gin、mgo
ubuntu mongodb安装和使用
https://www.cnblogs.com/weihu/p/8570083.html
mongo service 的开启和关闭
开启 sudo service mongodb start
关闭 sudo service mongodb stop
重启 sudo service mongodb restart
gin的安装
https://www.cnblogs.com/woodx/p/14130891.html
gin的使用实例
https://github.com/gin-gonic/gin
golang mgo的使用
https://segmentfault.com/a/1190000020980642?utm_source=tag-newest
三、逐步实现api中的功能
这次项目我们采取前后端分离的方式,前端和后端都根据api来展开实现。
我们的api通过swagger editor生成,主要包括user、article、like、comment四个部分,接下来以user的实现为例,具体请看仓库中的代码。
user有以下api
在main.go中对应着以下路由
//开启服务器
r := gin.Default()
user := r.Group("/user")
{
user.POST("/register", App.RegisterUser)
user.POST("/login", App.LoginUser)
user.GET("/username/:username", App.GetUserByUsername)
user.GET("/uid/:uid", App.GetUserByUid)
user.PUT("/:uid", App.ModifyUserByUid)
}
在App的user.go中定义了关于用户的数据结构
type User struct {
Id string `bson:"_id"`
Username string `bson:"username"`
Email string `bson:"email"`
Password string `bson:"password"`
Phone string `bson:"phone"`
UserStatus UserStatus `bson:"userStatus"`
}
以及关于用户的操作,比如登录操作
//用户登陆
func LoginUser (c *gin.Context) {
//解析post的数据存到postUser内
con,_ := ioutil.ReadAll(c.Request.Body) //获取post的数据
postUser := User{}
json.Unmarshal(con, &postUser)
//检查用户名和密码是否匹配
tmpUser := User{}
MyuserModel.DB.Find(bson.M{"username": postUser.Username, "password": postUser.Password}).One(&tmpUser)
hexid := fmt.Sprintf("%x", string(tmpUser.Id))
if (hexid == "") {
c.JSON(http.StatusOK, &ApiResponse {
Code: 400,
Type: "fail",
Message: "username and password do not match",
})
} else {
c.JSON(http.StatusOK, &ApiResponse {
Code: 200,
Type: "success",
Message: &ObjectID {
Id: hexid,
},
})
}
}
这个函数很简单,接收用户传来的用户名和密码,检查与数据库是否匹配,如果匹配则响应一个json报文,其中包含登录后的用户id,如果不匹配则返回400。
数据库的连接方法如下:
func initDB() {
session, err := mgo.Dial(url)
if (err != nil) {
panic(err)
}
session.SetMode(mgo.Monotonic, true)
App.MyuserModel = &App.UserModel {
DB: session.DB("myblog").C("user"),
}
}
完成这些以后将main函数运行起来,在9999端口监听,然后用postman测试(注意要先注册用户)
四、总结
经过这次作业,我学会了从零开始创建一个服务器,gin框架非常方便,配合REST风格的api很是舒服;mongodb是一个轻量级的数据库,golang社区提供的mgo可以很方便地用来操作它。