F496759f1f6cd40a18e5110bc9cdbfd3
Gin(九):生成restful接口

经过前面几章节的学习,基本对 Gin 中的一些概念和函数有所了解和掌握,也知道如何在代码中对其进行使用,那么接下来,我们将目光回到很久很久以前,具体多久呢?估摸着就是你在学习第二章 Gin 路由 的时候。

今天,不在模板上做文章了,而是要开启新的章节,我们叫它 restful

📍restful 是什么

说到 restful 相信很多乃至大量的朋友们都不陌生,如果你已经知道那就直接看下一个章节,但还是有很多小伙伴是第一次接触,那么这里就简单介绍一下restful

简单的说 restful 就是一种 接口定义风格,比如说之前我们的接口对于更新用户可能这样定义, /update_user 对于获取当前用户可能是 get_user ,删除当前用户为 /delete_user ,而现在使用 restful 风格的接口,那么我们对于更新用户的接口定义为 /user,获取用户定义为 /user ,删除用户为 /user

???..............................???

第一次接触的朋友肯定是满脸问号,所以我访问一下 /user 数据是更新了?删除了?还是获取一个用户?所以说一个完整的 restful 风格的接口并不是只是 url 的定义,还有请求方式。

还记得第二章中对于 gin 提供的 http 请求方式的说明吗?所以一个完整的 restful 请求需要加上请求方式。对于更新用户我们的接口应该是用 update 请求 `/user ,对于获取用户应该用 get 请求方式 /user ,对于删除用户应该用 delete 请求 /user 接口。

这里只对 restful 请求方式做最简单的介绍。

🔖第一个接口

我们现在来进行一个关于文章接口的展示,仍旧是连接上数据库,数据存在数据库中。

首先建立数据库,仍旧是在我们之前使用的数据库上建立新的表 article ,下面为建表语句,并且连接数据库。

create table ` article`
(
    id int auto_increment
        primary key,
    type varchar(20) null,
    content text not null
);

首先我们要有一个模型来和表结构对应,也用于我们接收前端的数据绑定。

新建 model 文件夹,在 model 文件夹中建立 article.go

type Article struct {
    Id      int    `json:"id"`
    Type    string `json:"type"`
    Content string `json:"content"`
}

通过标注 json 来进行对前端数据获取是的绑定。

接下来就可以完成第一个功能了,向数据库新增一个 article 。在 article.go 中完成向数据添加数据的代码,这里代码不做解释,和之前一致。

func (article Article) Insert() int {
    result, e := initDB.Db.Exec("insert into ` article` (type, content) values (?, ?);", article.Type, article.Content)
    if e != nil {
        log.Panicln("文章添加失败", e.Error())
    }
    i, _ := result.LastInsertId()
    return int(i)
}

完成 model 层,就可以完成 handler

handler 下新建 article/articleHandler.go

我们首要要获取前端穿过来的数据。通过 context.ShouldBindJSON 来对数据进行绑定。如果绑定成功,则调用我们上面写的增加方法进行添加。当完成后,通过 context.JSON 返回 json 数据。

func Insert(context *gin.Context) {
    article := model.Article{}
    var id = -1
    if e := context.ShouldBindJSON(&article); e == nil {
        id = article.Insert()
    }
    context.JSON(http.StatusOK, gin.H{
        "id": id,
    })
}

最后,我们完成对应的路由。

initRouter 中的 SetupRouter 中完善路由配置。

```go

top Created with Sketch.