Gin框架中的路由

路由概述

路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等) 组成的,涉及到应用如何响应客户端对某个网站节点的访问。

RESTful API 是目前比较成熟的一套互联网应用程序的 API 设计理论,所以我们设计我们的路 由的时候建议参考 RESTful API 指南。

在 RESTful 架构中,每个网址代表一种资源,不同的请求方式表示执行不同的操作:

只要API程序遵循了REST风格,那就可以称其为RESTful API。目前在前后端分离的架构中,前后端基本都是通过RESTful API来进行交互

例如,我们现在要编写一个学生管理系统,我们可以对一个学生进行查询、创建、更新和删除等操作,我们在编写程序的时候就要设计客户端浏览器与我们Web服务端交互的方式和路径。按照RESTful API我们通常会设计成如下模式:

 请求方法 URL 含义
 GET /student 查询学生信息
 POST /create_student 创建学生信息
 PUT /updata_student 更新学生信息
 DELETE /delete_student 删除学生信息
package main

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

func main() {
	r := gin.Default()

	r.GET("/student", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "查询学生信息成功",
		})
	})
	r.POST("/create_student", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "创建学生信息成功",
		})
	})
	r.PUT("/updata_student", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "更新学生信息成功",
		})
	})
	r.DELETE("/delete_student", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "删除学生信息成功",
		})
	})
	r.Run()
}

开发RESTful API的时候我们通常使用postman来做为客户端的测试工具

普通路由

简单的路由配置(可以通过 postman 测试)

当用 GET 请求访问一个网址的时候,做什么事情:

r.GET("网址", func(c *gin.Context) { c.String(200, "Get")
})

当用 POST 访问一个网址的时候,做什么事情:

r.POST("网址", func(c *gin.Context) { c.String(200, "POST")
})

当用 PUT 访问一个网址的时候,执行的操作:

r.PUT("网址", func(c *gin.Context) { c.String(200, "PUT")
})

当用 DELETE 访问一个网址的时候,执行的操作:

r.DELETE("网址", func(c *gin.Context) { c.String(200, "DELETE")
})

路由里面获取 Get 传值 域名/news?aid=20

r.GET("/news", func(c *gin.Context) { aid := c.Query("aid") c.String(200, "aid=%s", aid)
})

动态路由

域名/user/20

r.GET("/user/:uid", func(c *gin.Context) { uid := c.Param("uid")
c.String(200, "userID=%s", uid)
})

总结: 普通路由

r.GET("/get",func(c *gin.Context) {})
r.GET("/login",func(c *gin.Context) {}) 
r.POST("/login",func(c *gin.Context) {})

此外,还有一个可以匹配所有请求方法的Any方法如下

r.Any("/test",func(c *gin.Context) {})

为没有配置处理函数的路由添加处理程序,默认情况下它返回404代码,以下为没有匹配到路由的请求返回的是​templates/404.html​页面

r.NoRoute(func(c *gin.Context) {
		c.HTML(http.StatusNotFound,"templates/404.html",nil)
})

路由组

我们可以将拥有共同前缀URL的路由划分为一个路由组

package main

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

func main() {
	r := gin.Default()
	user := r.Group("/user")
	user.GET("/index", func(c *gin.Context) {})
	user.POST("/login", func(c *gin.Context) {})
	r.Run()
}

路由组也是支持嵌套的

func main() {
	r := gin.Default()
	user := r.Group("/user")
	user.GET("/index", func(c *gin.Context) {})
	user.POST("/login", func(c *gin.Context) {})
	pwd:=user.Group("/pwd")
	pwd.GET("/pwd",func(c *gin.Context) {})
	r.Run()
}

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注