返回顶部
首页 > 资讯 > 后端开发 > GO >Golang使用Gin创建RestfulAPI的实现
  • 678
分享到

Golang使用Gin创建RestfulAPI的实现

Golang创建RestfulAPIGolangGin创建RestfulAPI 2023-01-28 12:01:30 678人浏览 独家记忆
摘要

目录基本要求设计api代码开发创建项目创建数据格式Restful API返回数据列表新增数据项返回指定数据今天学习下Go语言如何集成Gin框架编写Restful WEB API的基本

今天学习Go语言如何集成Gin框架编写Restful WEB API的基本操作。Gin框架简化了Go原生语言构建Web应用程序的复杂度,在今天的学习中,将学会使用Gin构建路由请求、数据检索、JSON响应封装等最简单的Web服务。

基本要求

  • Go 1.16 及更高版本
  • 合适的编译工具 - text编辑器也满足要求
  • 命令终端 - linuxMac系统shell, windows系统的Cmd、PowerShell
  • curl 工具 - curl 是一个利用URL语法在命令行下工作的文件传输工具

设计API

遵循Restful API 架构风格,构建以下两个Http Api:

  • /albums
  • GET - 获取数据列表,以jsON格式返回
  • POST - 接收客户端发送的JSON请求,新增数据项
  • /albums/:id
    • GET - 根据指定ID获取特定的数据,跟SpringBoot框架动态ID使用 {id} 不同,Gin框架在语法上使用 冒号: 表明该参数为为前端传递的动态参数

代码开发

创建项目

创建项目目录

$ mkdir web-service-gin
$ cd web-service-gin

项目初始化 - 使用go mod init 命令初始化

$ go mod init example/web-service-gin

该命令会自动创建go.mod文件,该文件用于管理Go应用中的依赖,作用类似于Java语言中的Maven

创建数据格式

为了简化Demo开发难度,将直接使用内存中的数据,不跟DB进行交互(真实项目中不推荐)。首先在项目根目录下创建main.go文件,文件内容如下:

package main// 定义JSON 返回格式type album struct {    ID     string  `json:"id"`    Title  string  `json:"title"`    Artist string  `json:"artist"`    Price  float64 `json:"price"`}// 内存中存储的数组var albums = []album{    {ID: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99},    {ID: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99},    {ID: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99},}

Restful API

返回数据列表

当客户端使用Get方式请求**/albums**路径时,需要按照JSON格式返回所有数据(这里先不讨论分页)。实现该需求,代码开发时,需要注意以下两点

  • 准备响应逻辑
  • 将请求路径跟响应逻辑进行匹配

处理函数

// 在main.go新增函数
// getAlbums responds with the list of all albums as JSON.
func getAlbums(c *gin.Context) {
    c.IndentedJSON(http.StatusOK, albums)
}

代码说明:

编写getAlbums函数,该函数接受gin.Context参数。您可以为该函数指定任何你喜欢的函数名称。gin.Context是Gin框架中最重要的部分,它携带HTTP Request请求的所有细节,如请求参数、验证、JSON序列化等

调用Context.IndedJSON将结构序列化为JSON并将其添加到响应中。Context.IndedJSON函数的第一个参数是要发送给客户端的HTTP状态代码。在这里默认为200,表示请求成功

**路由处理 **

// 在 main.go 文件中新增
func main() {
    router := gin.Default()
    router.GET("/albums", getAlbums)

    router.Run("localhost:8080")
}

代码说明

  • 使用默认方式初始化Gin Router路由
  • 使用GET方法关联**/albums** 和 getAlbums 函数
  • 调用Run函数启动服务器

新增依赖

// 在 main.go 文件中新增
package main

import (
    "net/http"
    "GitHub.com/gin-gonic/gin"
)

运行服务

添加依赖 - 使用以下命令 拉取Gin框架依赖包

$ go get .

运行服务

$ go run .

使用curl工具发送Http请求 - 打开另外的终端发送请求

curl http://localhost:8080/albums

新增数据项

使用同样的方式,在服务器端编写POST请求接收客户端数据新增数据项。跟之前Get请求稍微不同的是,该请求需要从request对象中解析出Body信息

处理函数

// postAlbums adds an album from JSON received in the request body.
func postAlbums(c *gin.Context) {
    var newAlbum album

    // 调用BindJSON方法将数据解析到 newAlbum变量中
    if err := c.BindJSON(&newAlbum); err != nil {
        return
    }
    // 将数据追加到内存数组中
    albums = append(albums, newAlbum)
    c.IndentedJSON(http.StatusCreated, newAlbum)
}

路由处理

func main() {
    router := gin.Default()
    router.GET("/albums", getAlbums)
    router.POST("/albums", postAlbums)

    router.Run("localhost:8080")
}

运行服务

$ go run .

发送客户端请求

$ curl http://localhost:8080/albums \
    --include \
    --header "Content-Type: application/json" \
    --request "POST" \
    --data '{"id": "4","title": "The Modern Sound of Betty Carter","artist": "Betty Carter","price": 49.99}'

此时,在调用获取数据列表的接口,必须返回4个数据了

返回指定数据

当客户端以GET请求方式调用 **/albums/[id]**路径,服务端需要返回指定ID的数据详情。此时该ID是由客户端动态指定的,接下来看看如何实现

处理函数

// getAlbumByID locates the album whose ID value matches the id
// parameter sent by the client, then returns that album as a response.
func getAlbumByID(c *gin.Context) {
    id := c.Param("id")

    // Loop over the list of albums, looking for
    // an album whose ID value matches the parameter.
    for _, a := range albums {
        if a.ID == id {
            c.IndentedJSON(http.StatusOK, a)
            return
        }
    }
    c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"})
}

路由匹配

func main() {
    router := gin.Default()
    router.GET("/albums", getAlbums)
    router.GET("/albums/:id", getAlbumByID)
    router.POST("/albums", postAlbums)

    router.Run("localhost:8080")
}

运行服务

$ go run .

客户端请求

$ curl http://localhost:8080/albums/2

完整代码

package main

import (
    "net/http"
    "github.com/gin-gonic/gin"
)

// album represents data about a record album.
type album struct {
    ID     string  `json:"id"`
    Title  string  `json:"title"`
    Artist string  `json:"artist"`
    Price  float64 `json:"price"`
}

// albums slice to seed record album data.
var albums = []album{
    {ID: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99},
    {ID: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99},
    {ID: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99},
}

func getAlbums(c *gin.Context) {
    c.IndentedJSON(http.StatusOK, albums)
}

// postAlbums adds an album from JSON received in the request body.
func postAlbums(c *gin.Context) {
    var newAlbum album

    // Call BindJSON to bind the received JSON to
    // newAlbum.
    if err := c.BindJSON(&newAlbum); err != nil {
        return
    }

    // Add the new album to the slice.
    albums = append(albums, newAlbum)
    c.IndentedJSON(http.StatusCreated, newAlbum)
}

// getAlbumByID locates the album whose ID value matches the id
// parameter sent by the client, then returns that album as a response.
func getAlbumByID(c *gin.Context) {
    id := c.Param("id")

    // Loop over the list of albums, looking for
    // an album whose ID value matches the parameter.
    for _, a := range albums {
        if a.ID == id {
            c.IndentedJSON(http.StatusOK, a)
            return
        }
    }
    c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"})
}

func main() {
    router := gin.Default()
    router.GET("/albums", getAlbums)
    router.POST("/albums", postAlbums)
    router.GET("/albums/:id", getAlbumByID) 
   router.Run("localhost:8080")
}

到此这篇关于golang使用Gin创建Restful API的实现的文章就介绍到这了,更多相关Golang 创建Restful API内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Golang使用Gin创建RestfulAPI的实现

本文链接: https://lsjlt.com/news/178453.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Golang使用Gin创建RestfulAPI的实现
    目录基本要求设计API代码开发创建项目创建数据格式Restful API返回数据列表新增数据项返回指定数据今天学习下Go语言如何集成Gin框架编写Restful Web API的基本...
    99+
    2023-01-28
    Golang 创建Restful API Golang Gin创建Restful API
  • golang GORM和Gin无法创建具有关联的对象
    问题内容 我使用 GORM 作为 ORM 以及我的 Golang API 来与我的数据库进行通信。 但是对于创建与数据库关联的实体,代码失败了(DB.Create(&data)...
    99+
    2024-02-12
  • Golang怎么使用Gin框架实现HTTP上传文件
    本文小编为大家详细介绍“Golang怎么使用Gin框架实现HTTP上传文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang怎么使用Gin框架实现HTTP上传文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • 如何在使用golang创建的wasm中实现多线程?
    积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《如何在使用golang创建的was...
    99+
    2024-04-05
  • 使用gin框架搭建简易服务的实现方法
    go语言web框架挺多的,各有各的特点和风格。我之所以在项目中使用gin框架,是因为项目一开始是用的martini,一个设计得很好的框架,但是存在一个比较严重的问题,就是大量使用反射...
    99+
    2024-04-02
  • golang怎么使用Gin框架实现短信验证码功能
    golang怎么使用Gin框架实现短信验证码功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用json配置文件// 配置文件 "...
    99+
    2023-06-20
  • Golang使用Gin框架实现HTTP上传文件过程介绍
    目录HTTP上传的文件的原理Gin框架文件上传Demo限制文件上传的大小文件类型验证文件上传进度-后台计算文件上传进度HTTP上传的文件的原理 HTTP协议的文件上传是通过HTTP ...
    99+
    2023-05-15
    Go HTTP上传文件 Go Gin框架上传文件
  • 创建有效的文件监控系统:使用Golang实现指南
    构建高效的文件监控系统:Golang实现指南 随着信息技术的不断发展,文件管理和数据监控成为了现代软件开发中一个不可或缺的环节。在众多的编程语言中,Golang以其高效、并发性强、易于...
    99+
    2024-02-24
    golang 文件监控 高效
  • Golang中Gin框架的使用入门教程
    目录安装与简单测试常见请求与分组请求获取参数 与 参数合法性验证获得query中参数获得multipart/urlencoded form中的参数模型绑定和参数验证自定义参数验证项目...
    99+
    2024-04-02
  • 使用matplotlib创建Gif动图的实现
    目录1、Matplotlib 简介2、绘制动画正弦和余弦波3、绘制曲面图 4、绘制回归图1、Matplotlib 简介 数据可视化有助于更有效地讲述有关数据的故事并使其易于...
    99+
    2024-04-02
  • 从零开始:Golang接口的创建与实现
    从零开始:Golang接口的创建与实现 在Golang中,接口是一种定义行为的类型。接口定义了一组方法,而不提供这些方法的具体实现。接口是一种抽象类型,通过接口可以实现多态性,让程序更...
    99+
    2024-02-23
    接口 golang 实现
  • 使用Java验证Golang中创建的签名
    编程网今天将给大家带来《使用Java验证Golang中创建的签名》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都...
    99+
    2024-04-04
  • 在 Golang 中使用 Cobra 创建 CLI 应用
    虽然现在我们使用的大多数软件都是可视化的,很容易上手,但是这并不代表 CLI(命令行)应用就没有用武之地了,特别是对于开发人员来说,还是会经常和 CLI 应用打交道。而 Golang...
    99+
    2024-04-02
  • Gin-高性能 Golang Web框架的介绍和使用
    偶遇 Gin 我之前一直在使用 Beego 框架来做应用的 Api,因为它的写法跟 PHP 的 MVC 一样,上手简单,所以对它的表现还算满意。用的久了,发现 Beego 的编程思想就是照搬了 PHP 的那一套,写法上倒没什么,但是在...
    99+
    2024-04-02
  • Golang怎么实现文件夹的创建与删除
    本文小编为大家详细介绍“Golang怎么实现文件夹的创建与删除”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang怎么实现文件夹的创建与删除”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。创建文件夹创建文件...
    99+
    2023-06-30
  • 如何使用golang创建WebSocket服务器
    如何使用golang创建WebSocket服务器WebSocket是一种在客户端和服务器之间实现双向通信的协议。它允许我们通过一个持久的连接在客户端和服务器之间传输数据。在这篇文章中,我将向你介绍如何使用golang创建一个简单的WebSo...
    99+
    2023-12-17
    websocket Golang (Go) 服务器 (Server)
  • 使用 Golang 创建文件ID描述符
    在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《使用 Golang 创建文件ID描述符》就很适合你!本篇内容主要包括##conten...
    99+
    2024-04-05
  • Go使用Gin+mysql实现增删改查的详细实例
    目录0.前置知识1.架构2.功能模块3.实现流程4.代码5.结果总结 0.前置知识 Go中的struct。mysql、Gin框架。Web基础。 1.架构 使用mysql作为数据库,Gin作为Web框架。 2.功...
    99+
    2022-12-02
    go gin mysql gin操作mysql gin mysql增删改查
  • Pytorch实现张量的创建与使用方法
    目录张量的创建及其基本类型1.张量(Tensor)函数创建方法2.张量的类型3.张量类型的转化张量的维度及形变1.创建高维张量2.张量的形变2.1 flatten拉平: 将任意维度张...
    99+
    2024-04-02
  • Vue使用extend动态创建组件的实现
    目录什么是extend方法?如何使用extend方法?动态创建组件总结Vue.js是一个流行的JavaScript框架,它提供了许多功能来帮助我们构建交互式Web应用程序。其中之一是...
    99+
    2023-05-16
    Vue extend动态创建组件 Vue extend动态组件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作