衔接上文,继续开发。

 

定义接口

这里我们实现标签相关的逻辑,包括新建标签、获取标签、更新标签、删除标签。

请求接口如下:

  • 获取标签列表:GET(“/tags”)
  • 新建标签:POST(“/tags”)
  • 更新指定标签:PUT(“/tags/:id”)
  • 删除指定标签:DELETE(“/tags/:id”)

 

编写空路由

在routers目录下新建api目录,然后在api下新建v1目录,再新建tag.go文件,写入内容:

 

注册路由

修改routers下的router.go文件,内容如下:

 

检验路由是否注册成功

执行 go run main.go,就可以检查路由规则是否注册成功。

 

获取标签

获取标签的Models逻辑

在models目录下创建tag.go文件,写入内容:

 

获取标签的路由逻辑

继续修改之前的 routers/api/vi 下的tag.go文件,先实现获取标签接口:

  • c.Query 可以用于获取Url参数,比如 ?name=test&state=1,而 c.DefaultQuery则支持设置一个默认值。
  • util.GetPage保证接口对page的处理是一致的

 

先运行 go run main.go 启动服务,然后请求 192.168.1.101/api/v1/tags,查看返回结果。

{“code”:200,”data”:{“lists”:null,”total”:0},”msg”:”ok”}

因为数据库内没有数据,所以返回的值是空。

 

新增标签

新增标签的models逻辑

我们先修改models目录下的tag.go文件,新增两个方法:

 

新增标签的路由逻辑

在此之前我们需要获取beego的依赖包validation用于表单验证。

go get -u github.com/astaxie/beego

 

然后修改router/api/v1目录下的tag.go文件,给我们之前定义的AddTag新增实现。

然后使用POST访问 192.168.1.101:8000/api/v1/tags?name=1&state=1&created_by=root 查看code返回及数据库表内容。

这里推荐一个工具Postman

使用教程可以参考一下这里

然后请求完毕后,可以看一下数据库是否有新增内容。

 

我这里出了点问题,ORM和数据库之间的衔接出问题了。

 

需要修改Models,修改models文件夹下models.go文件,新增结构体:

 

然后修改models文件夹下tag.go文件,修改Tag结构体的继承:

 

然后重新运行服务,发送POST请求,然后查看数据库就有一条新数据了。

但是存在问题是 created_on 和 modified_on 两个字段都没有值。

 

编写Models Hook

这里我们需要新增两个方法,修改models/tag.go文件:

然后我们再调用一次Post方法,这次把name改为2,整个请求:

192.168.1.101:8000/api/v1/tags?name=2&state=1&created_by=root

然后查看数据库内容即可。

 

P.S. 这里gorm升级之后,操作方法也变了,参考:

https://github.com/go-gorm/gorm/blob/master/tests/hooks_test.go#L29

 

 

编写其他接口逻辑

编写接口Models逻辑

修改models文件夹下tag.go文件,新增三个函数,修改一个函数。

新增了EditTag 和 DeleteTag方法,修改IsExistTag方法,拓展为IsExistTagByName和IsExistTagByID。

 

编写接口路由逻辑

这里修改 routers/api/v1/tag.go 文件,补全剩下的EditTag、DeleteTag方法。

 

然后重启服务,使用Postman工具调用修改和删除标签。

PUT 修改标签:

192.168.1.101:8000/api/v1/tags/1?name=edit1&state=0&modified_by=root

DELETE 删除标签:

192.168.1.101:8000/api/v1/tags/1

查看code返回值是否为200。

 

Delete没问题,PUT这里回调AfterUpdate更新modified_on一直失败。

日志查询是没有指定id,所以需要修改两处:

1. 数据修改Hook这里两个函数更新了一下

 

2. 路由routers/api/v1/tag.go文件,EditTag函数修改data,往里面多写一个id变量:

增加了 data[“id”] = id

 

然后重启服务,再测试,OK了…

【Go】gin Blog项目(二) 标签
Tagged on:     
0 0 投票数
Article Rating
订阅评论
提醒

0 评论
内联反馈
查看所有评论