Web服务构建与前后端分离的开发
本次开发过程我负责后端部分的开发,以下是我的一些学习总结
借助swagger生成的框架进行开发
借助swagge进行API设计,然后使用swagger-editor上方的Generate Server选项,点击go-server,会生成一个可运行的代码包,为我们编写了可自动化的路由匹配,匹配函数调用,以及资源的结构体定义。代码文件目录结构如下:
其中,api_user.go
和api_articles.go
为实现所需功能的主要代码部分。其他部分的框架代码根据需要做小部分改动即可。
根据API的设计,api_articles.go
中有三个实现功能的关键方法:
func GetArticlesByAuthor(w http.ResponseWriter, r *http.Request)
func GetArticlesByName(w http.ResponseWriter, r *http.Request)
func GetArticlesByTag(w http.ResponseWriter, r *http.Request)
api_user.go
中有也有三个实现功能的关键方法:
func LogOut(w http.ResponseWriter, r *http.Request)
func SignIn(w http.ResponseWriter, r *http.Request)
func SignUp(w http.ResponseWriter, r *http.Request)
对于请求参数的获取可以通过ParseForm
和Form
,以GetArticlesByAuthor
为例:
r.ParseForm()
if len(r.Form["articleAuthor"]) <= 0 {
if err != nil {
reponse := ErrorResponse{"Invalid query"}
JsonResponse(reponse, w, http.StatusBadRequest)
return
}
}
author := r.Form["articleAuthor"][0]
请求的回复使用JSON回复:
func JsonResponse(response interface{}, w http.ResponseWriter, code int) {
json, err := json.Marshal(response)
if err != nil {
log.Fatal(err)
return
}
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(code)
w.Write(json)
}
postman
postman可以在前端还未开发好的情况下,对后端进行测试。当然也可开启服务器后,另开一个终端使用curl命令进行测试,不过前者可以提供更良好的交互界面。
- 下载安装包:在浏览器中输入官网地址,下载与系统对应版本的postman压缩包,我这里使用的是Ubuntu 18.0.4TLS
- 解压:
tar -zxf Postman-linux-x64-7.13.0.tar.gz
- 运行:
./Postman/Postman
golang构建数据服务
这一部分我主要参考了潘老师的博客及其中相关链接
-
docker安装mysql
docker search mysql docker pull mysql
-
启动mysql作为主机服务
sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql
-
之后就可以在代码中借助sql的接口查询数据,例如:
query, err := db.Query("select * from test.Article where ArticleAuthor = '" + author + "'") if err != nil { log.Fatal(err) } defer query.Close() v, err := getJSON(query) if err != nil { log.Fatal(err) } if string(v) == "[]" { reponse := ErrorResponse{"Invalid query"} JsonResponse(reponse, w, http.StatusBadRequest) return }