百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Gin(九)生成restful 接口,go语言最火web框架之一

toyiye 2024-06-21 11:59 10 浏览 0 评论

经过前面几章节的学习,基本对 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 中完善路由配置。

 articleRouter := router.Group("")
 {
 // 添加一篇文章
 articleRouter.POST("/article", article.Insert)
 }

?测试

当这一切完成后就是运行测试了。

当然我们最好编写单元测试。

在 test 文件夹中,新建 article_test.go 测试文件。

 package test
 ?
 import (
 "GinHello/initRouter"
 "GinHello/model"
 "bytes"
 "encoding/json"
 "github.com/gin-gonic/gin"
 "gopkg.in/go-playground/assert.v1"
 "net/http"
 "net/http/httptest"
 "testing"
 )
 ?
 var router *gin.Engine
 ?
 func init() {
 router = initRouter.SetupRouter()
 }
 ?
 func TestInsertArticle(t *testing.T) {
 article := model.Article{
 Type: "go",
 Content: "hello gin",
 }
 marshal, _ := json.Marshal(article)
 w := httptest.NewRecorder()
 req := httptest.NewRequest(http.MethodPost, "/article", bytes.NewBufferString(string(marshal)))
 req.Header.Add("content-typ", "application/json")
 router.ServeHTTP(w, req)
 assert.Equal(t, w.Code, http.StatusOK)
 assert.NotEqual(t, "{id:-1}", w.Body.String())
 }

在测试用例里创建一个 article 对象,并且赋值,通过 json 方法建对象转换为 json,最后发起请求。

运行测试用例,如果我们的代码写的 没有问题的话,测试通过,并且数据库中会对应添加该数据。

当然你不想写单元测试也是可以的,可以通过 Postman 等来进行测试,这里给大家简单的介绍一下 GoLand Http 测试工具。

我们新建立一个 http_test 文件夹,在文件夹下面新建一个 .http 文件,命名为 article.http

对文件进行编写,编写如下,指定我们的请求地址,指定要求的数据。在POST 左侧就会出现一个 运行按钮,点击运行按钮,控制台会出现返回结果。运行该文件时,要将我们的项目启动起来。

 POST http://localhost:8080/article
 Content-Type: application/json
 ?
 {
 "type": "go",
 "content": "Hello Go"
 }

其他的 .http 文件的语法规则 请看官方文档。

这样就完成了第一个 restful 接口,同样可以完成其他的接口。其他的接口示例请看 Github 上代码。

?总结

本章节主要讲述了如何构建一套 restful 接口,restful 接口对于现在的开发是越来越重要了,大量的接口都是 restful 风格。Github 上代码完成了查询,添加,删除等接口,篇幅有限,不展开多讲了。

?本章节示例代码

Github 请查看 了解更多

推荐阅读

Gin(一):Hello Gin ,学习 Gin 从这里开始

Gin(二):路由Router ,go语言框架学习

Gin(三):与模板配合使用 tmpl,go web 开发最火框架之一

Gin(四):接收表单数据和模型绑定,Go语言最火web框架之一

Gin(五):连接MySQL , Go 轻量级框架 Gin

Gin(六):文件的上传,go语言最火框架之一

Gin(七):中间件的介绍和使用,GO语言最火的框架之一

Gin(八):cookies使用「不做标题党,让你看后有所收获」

Gin(九):生成restful 接口,go语言最火web框架之一

Gin(十): 集成 Swagger,Gin配置这个神器,再也不用写接口文档了

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码