Go语言编程之旅:一起用Go做项目
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 项目设计

在完成初步的示例演示后,下面进入具体的预备开发阶段。一般在正式进入业务开发前,需要对本次需求的迭代内容进行多类的设计和评审,即无设计不开发。但是目前还有很多初始化的东西没有做,因此在本节中,我们主要对项目的目录结构、接口方案、路由注册、数据库等内容进行设计和开发。

2.2.1 目录结构

创建项目的标准目录结构,以便后续的开发,最终的目录结构如下所示:

configs:配置文件。

docs:文档集合。

global:全局变量。

internal:内部模块。

dao:数据访问层(Database Access Object),所有与数据相关的操作都会在dao层进行,例如 MySQL、Elasticsearch等。

middleware:HTTP中间件。

model:模型层,用于存放model对象。

routers:路由相关的逻辑。

service:项目核心业务逻辑。

pkg:项目相关的模块包。

storage:项目生成的临时文件。

scripts:各类构建、安装、分析等操作的脚本。

third_party:第三方的资源工具,如Swagger UI。

2.2.2 数据库

在本次的项目开发中,我们主要实现两个基础业务功能,功能点如下:

标签管理:文章所归属的分类,也就是标签。通常我们会给文章打好几个标签,用于标识文章内容的要点和要素,以便读者的识别和SEO的收录等。

文章管理:对整个文章内容的管理,并且需要把文章和标签进行关联。

要想做业务开发,首先就要设计数据库。因此我们将根据业务模块进行 MySQL 数据库的创建和表设计,如图2-2所示。

图2-2

1.创建数据库

准备一个MySQL数据库,5.7版本即可。在MySQL中执行如下SQL语句:

通过上述 SQL 语句,数据库会创建本项目的数据库 blog_service,并将它的默认编码设置为utf8mb4。另外,在每个数据表中,都包含同样的公共字段:

在创建数据表时,注意将其同时包含写入就可以了。

2.创建标签表

创建标签表,表字段主要为标签的名称、状态和公共字段。

3.创建文章表

创建文章表,表字段主要为文章的标题、封面图、内容概述和公共字段。

4.创建文章标签关联表

创建文章标签关联表,这个表主要用于记录文章和标签之间的1∶N的关联关系。

2.2.3 创建model

在创建完成数据库的表之后,到internal/model目录中创建对应的model对象,以便后续使用应用程序。

1.创建公共model

在internal/model目录下创建model.go文件,写入如下代码:

2.创建标签model

在internal/model目录下创建tag.go文件,写入如下代码:

3.创建文章model

在internal/model目录下创建article.go文件,写入如下代码:

4.创建文章标签model

在internal/model目录下创建article_tag.go文件,写入如下代码:

2.2.4 路由

在完成数据库的设计之后,我们需要对业务模块的管理接口进行设计。在这部分内容中,最核心的就是设计和编写增删改查的RESTful API。在RESTful API中,HTTP方法对应的行为和动作如下:

GET:读取和检索动作。

POST:新增和新建动作。

PUT:更新动作,用于更新一个完整的资源,要求为幂等。

PATCH:更新动作,用于更新某一个资源的一个组成部分。也就是说,当只需更新该资源的某一项时,应该使用PATCH而不是PUT,可以不幂等。

DELETE:删除动作。

下面就我们根据RESTful API的基本规范,对业务模块设计路由规则,从业务角度划分多个管理接口。

1.标签管理

标签管理如表2-1所示。

表2-1

续表

2.文章管理

文章管理如表2-2所示。

表2-2

3.路由管理

在确定了业务接口设计后,需要对业务接口进行基础编码,以确定其方法原型。把当前工作区切换到项目目录的internal/routers下,新建router.go文件,写入如下代码:

2.2.5 处理程序

下面编写对应路由的处理方法。在目录internal/routers/api下新建v1文件夹,在v1文件夹中新建tag.go(标签)和article.go(文章)文件,写入如下代码。

1.标签方法

2.文章方法

3.路由管理

在编写好路由的 Handler 方法后,只需将其注册到对应的路由规则上即可。打开项目目录internal/routers下的router.go文件,修改代码如下:

2.2.6 启动接入

在编写完模型、路由的代码后,即可修改前面章节编写的 main.go 文件,把它改造为这个项目的启动文件,修改代码如下:

通过自定义http.Server,可以设置监听的TCP Endpoint、处理的程序、允许读取/写入的最大时间、请求头的最大字节数等基础参数,最后调用ListenAndServe方法即可开始监听。

2.2.7 验证

在项目根目录下,执行go run main.go将服务运行起来,然后查看服务是否可以正常运行,代码如下:

启动信息表示路由注册正常,再实际调用一下接口,如果能够正常返回,就大功告成了。

2.2.8 小结

本节我们完成了一个项目的第一步,即项目的标准目录创建、数据库设计、数据模型编写、接口方法的设计和接口处理方法及启动接入。