1、路由概述
路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)
组成的,涉及到应用如何响应客户端对某个网站节点的访问。
RESTful API 是目前比较成熟的一套互联网应用程序的 API 设计理论,所以我们设计我们的路
由的时候建议参考 RESTful API 指南。
在 RESTful 架构中,每个网址代表一种资源,不同的请求方式表示执行不同的操作:
组成的,涉及到应用如何响应客户端对某个网站节点的访问。
RESTful API 是目前比较成熟的一套互联网应用程序的 API 设计理论,所以我们设计我们的路
由的时候建议参考 RESTful API 指南。
在 RESTful 架构中,每个网址代表一种资源,不同的请求方式表示执行不同的操作:
GET ( SELECT ) | 从服务器取出资源(一项或多项) |
POST ( CREATE ) | 在服务器新建一个资源 |
PUT ( UPDATE ) | 在服务器更新资源(客户端提供改变后的完整资源) |
DELETE ( DELETE ) | 从服务器删除资源 |
2、简单的路由配置
简单的路由配置(可以通过 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)})
3、 c.String() c.JSON() c.JSONP() c.XML() c.HTML()
返回一个字符串
r.GET("/news", func(c *gin.Context) {aid := c.Query("aid")c.String(200, "aid=%s", aid)})
返回一个 JSON 数据
func main() {r := gin.Default()// gin.H 是 map[string]interface{} 的缩写r.GET("/someJSON", func(c *gin.Context) {// 方式一:自己拼接 JSONc.JSON(http.StatusOK, gin.H{"message": "Hello world!"})})r.GET("/moreJSON", func(c *gin.Context) {// 方法二:使用结构体var msg struct {Namestring `json:"user"`Message stringAgeint}msg.Name = "雨轩编程 "msg.Message = "Hello world!"msg.Age = 18c.JSON(http.StatusOK, msg)})r.Run(":8080")}
JSOPN
func main() {r := gin.Default()r.GET("/JSONP", func(c *gin.Context) {data := map[string]interface{}{"foo": "bar",}// /JSONP?callback=x// 将输出: x({\"foo\":\"bar\"})c.JSONP(http.StatusOK, data)})// 监听并在 0.0.0.0:8080 上启动服务r.Run(":8080")}
返回 XML 数据
func main() {r := gin.Default()// gin.H 是 map[string]interface{} 的缩写r.GET("/someXML", func(c *gin.Context) {// 方式一:自己拼接 JSONc.XML(http.StatusOK, gin.H{"message": "Hello world!"})})r.GET("/moreXML", func(c *gin.Context) {// 方法二:使用结构体type MessageRecord struct {Name stringMessage stringAge int}var msg MessageRecordmsg.Name = "雨轩编程 "msg.Message = "Hello world!"msg.Age = 18c.XML(http.StatusOK, msg)})r.Run(":8080")}
渲染模板
router.GET("/", func(c *gin.Context) {c.HTML(http.StatusOK, "default/index.html", map[string]interface{}{"title": "前台首页 "})})