衔接上文,继续开发。

 

先用tree命令,记录一下完成前面两个部分之后的文件结构:

 

定义接口

接下来我们编写文章的逻辑,定义接口如下:

  • 获取文章列表:GET(“/articles”)
  • 获取指定文章:GET(“/articles/:id”)
  • 新建文章:POST(“/articles”)
  • 更新指定文章:PUT(“/articles/:id”)
  • 删除指定文章:DELETE(“/articles/:id”)

路由接口

在routers/api/v1目录下新建article.go文件,写入内容:

 

然后修改routers下的router.go文件,主要是添加对文章的路由:

 

Models逻辑

一次性完成所有的接口吧,在models目录下创建article.go文件,写入文件内容:

这里讲两点:

1. Article如何关联Tag的,Preload是什么?

gorm会通过类名+ID的方式去找两个类之间的关联关系。

PreLoad是一个预加载器,它会执行两条SQL:

 

在查询出结果之后,gorm内部处理对应的映射逻辑,将它填充到Article的Tag中。

 

2. value.(type) 是什么?

value是一个接口值,type是接口类型。比如 data[“tag_id”].(int)

实际是go语言中的类型断言,判断接口值的实际类型是不是某个类型。

 

路由逻辑

接下来我们修改 routers/api/v1目录下的article.go文件,修改如下:

 

这里我把err的包改为e…因为它和常用的变量名err重复了,所以你们把之前的都改改吧,晕…

修改后目录结构如下:

 

功能验证

请求文章:

GET 192.168.1.101:8000/api/v1/articles

GET 192.168.1.101:8000/api/v1/articles/1

 

创建文章:

POST 192.168.1.101:8000/api/v1/articles?tag_id=1&title=test1&desc=test-desc&content=test-content&created_by=root&state=1

 

更新

PUT 192.168.1.101:8000/api/v1/articles/1?tag_id=1&title=test-edit1&desc=test-desc-edit&content=test-content-edit&modified_by=root&state=0

 

删除

DELETE 192.168.1.101:8000/api/v1/articles/1

 

这里可以用 Postman 一一验证。

 

验证结果

发现存在两个问题,

一个是创建文章的时候无效参数,是因为写错了一个判断条件,已修复。

 

另一个是修改文章的时候,modified_on 字段没有更新,发现是忘记传id进去了。

需要在 routers/api/v1/article.go 文件 EditArticle 函数加上 data[“id”] = id 这段赋值。

已经修复好了。

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

0 评论
最新
最旧 最多投票
内联反馈
查看所有评论