Gin 的路由就是给不同请求登记不同处理入口。
r.GET("/checkpoints", listCheckpoints)
r.GET("/checkpoints/:id", getCheckpoint)
r.POST("/tickets", createTicket)
r.PUT("/tickets/:id", updateTicket)
r.DELETE("/tickets/:id", deleteTicket)这可以翻译成:
高速交警中枢
├── GET /checkpoints -> 查看所有卡口
├── GET /checkpoints/:id -> 查看单个卡口
├── POST /tickets -> 新开处罚单
├── PUT /tickets/:id -> 修改处罚单
└── DELETE /tickets/:id -> 删除处罚单#1. 路径参数:车牌号、卡口编号这种“路口自带编号”
r.GET("/vehicles/:plate", func(c *gin.Context) {
plate := c.Param("plate")
c.JSON(http.StatusOK, gin.H{"plate": plate})
})访问:
/vehicles/A12345得到:
{"plate":"A12345"}#2. 查询参数:车上临时带来的筛查条件
r.GET("/tickets", func(c *gin.Context) {
status := c.DefaultQuery("status", "open")
officer := c.Query("officer")
c.JSON(http.StatusOK, gin.H{
"status": status,
"officer": officer,
})
})访问:
/tickets?status=closed&officer=zhangsan#3. 通配路径:后面整段都归这条线路处理
r.GET("/camera/:id/*action", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"id": c.Param("id"),
"action": c.Param("action"),
})
})比如:
/camera/17/reboot
/camera/17/config/night-mode#4. 路由的核心心智
路由 = HTTP 方法 + URL 路径 + 处理函数不是“URL 长得像就行”,而是:
什么车,从哪个入口进来,交给哪个执勤台。