衔接上文,继续开发。这一章主要是优化应用结构。

上一篇文章我们优化了配置结构,实现了配置项的统一管理。

 

这一章主要实现项目的优化,主要是下面几点:

  • 错误提前返回、统一返回方法
  • 从routers中抽离service,减少routers/api的逻辑。
  • 增加GORM错误判断,增加内部错误码,让错误提示更明确。

 

这一章内容比较长…

 

编写错误返回方法

错误提前返回,则必然会入侵 c.JSON。

1. 在pkg目录下,新建app文件夹,新建request.go文件,内容如下:

 

2. 在app文件夹下新建 response.go 文件,内容如下:

 

 

 

抽离service,优化routers

接下来的主要任务是针对Tag和Article都实现下面三个步骤。

  1. 修改models下的数据库操作,让GORM的操作有错误码返回
  2. 实现service,数据库操作都在这一层完成(包括后面接入Redis)。
  3. 优化routers

我们应该先实现Tag相关的修改,然后再实现Article相关修改。因为Article里面依赖了Tag。

 

Tag相关

1. 修改models目录下,tag.go文件,

 

2. 项目根目录新建service文件夹,文件夹内新建tagservice文件夹,新建tag.go文件,内容如下:

 

3. 同时修改routers/api/v1/tag.go 文件

 

 

Article相关

1. 修改models目录下的article.go文件,保证所有的数据库操作都会返回错误码。

 

2. 项目根目录下service文件夹内新建articleservice文件夹,新建article.go文件:

这里主要实现文章数据操作相关方法,

 

3. 修改routers/api/v1/article.go 文件

因为没有使用Form表单,所以代码量会稍微多一些。

 

 

验证修改

最后我们需要验证我们的修改,进行测试。

启动服务,然后使用Postman。

获取Auth Token

GET 192.168.1.101:8000/api/auth?username=root&password=root

返回:

 

测试Tag

新增Tag:POST 192.168.1.101:8000/api/v1/tags?name=17&state=1&created_by=root&token=eyJhbG……

查找Tag:GET 192.168.1.101:8000/api/v1/tags?name=17&state=1&token=eyJh…

我这里返回的Id是36,下面的修改会用到:

修改Tag:PUT 192.168.1.101:8000/api/v1/tags/36?name=17-Edit&state=0&modified_by=root&token=eyJhb…

再查找Tag:GET 192.168.1.101:8000/api/v1/tags?state=0&token=eyJhbG…

删除Tag:DELETE 192.168.1.101:8000/api/v1/tags/36?token=eyJhbG…

然后再次查找:GET 192.168.1.101:8000/api/v1/tags?state=0&token=eyJhbG…

最后通过MySQL语句查看软删除效果:

 

测试Article

新增Article: POST 192.168.1.101:8000/api/v1/articles?tag_id=8&title=ArticleTest&desc=ArticleTest-Desc&content=ArticleTest-Content&created_by=root&state=1&token=eyJhbG…

 

这里发现一个问题,新增文章之后,我居然不知道文章的ID,先查找所有文章:

GET 192.168.1.101:8000/api/v1/articles?token=eyJhbG…

 

这里找到我之前的文章ID是3,再查找指定文章:

GET 192.168.1.101:8000/api/v1/articles/3?token=eyJhbG…

 

然后修改文章:

PUT 192.168.1.101:8000/api/v1/articles/3?content=ArticleTest-Content-Edit&modified_by=root&state=1&token=eyJhbG…

这里注意,如果title、desc等字段不赋值,就会被置空。

为什么这么设计是因为:如果我就删掉文章所有内容,那我就需要给它一个空值。

 

最后删除文章:

DELETE 192.168.1.101:8000/api/v1/articles/3?token=eyJhbG…

 

这些方法测试通过,且没有bug。则视为OK。

【Go】gin Blog项目(十一) 优化项目结构
Tagged on:     
0 0 vote
Article Rating
订阅
提醒
0 评论
Inline Feedbacks
View all comments