gin的路由使用的是httprouter庫(請自行github一下),性能好,相對功可以用git
傳統的一些API路徑設計方式(仔細看看行不行)github
GET /topic/{topic_id} 獲取帖子明細
GET /topic/{user_name} 獲取用戶發佈的帖子列表
GET /topic/top 獲取最熱帖子列表api
咱們上節課的代碼改正下restful
package main import "github.com/gin-gonic/gin" func main() { router := gin.Default() router.GET("/topic/:topic_id", func(c *gin.Context) { c.String(200,"獲取topicid=%s的帖子",c.Param("topic_id")) }) router.Run() // listen and serve on 0.0.0.0:8080 }
訪問 http://localhost:8080/topic/123 地址性能
能夠輸出 「」獲取topicid=123的帖子「」spa
上述代碼的侷限 目前不支持正則,也不支持 固定路徑和參數路徑共存 譬如 router.GET("/topic/:id", xxxoo) router.GET("/topic/user", xxxoo) 甚至 "/topic/user/:username" 也會衝突
因此須要從新設計API規則,咱們設置下面一些有逼格的設計
須要知足3點(姓什麼,名什麼,家住哪裏)rest
1、api有版本信息 譬如 /v1/xxxoo /v2/xxxoo 二、儘量使用複數,且含義明確。名詞最佳 /v1/topics /v1/users /v1/getusers //不推薦 3、 使用GET參數規劃數據展示規則 /v1/users //顯示所有或默認條數 /v1/users?limit=10 //只顯示10條 /v1/topics?username=xxxoo //顯示xxoo的帖子
v1表明版本號,後面改版可能爲v2
其實就是restful Api的規則啦,所以剛纔那兩個貨咱們改爲這樣code
package main import "github.com/gin-gonic/gin" func main() { router := gin.Default() router.GET("/v1/topics", func(c *gin.Context) {
//加個if else判斷而已 if c.Query("username")==""{ //Query是獲取問號?後面的參數值 c.String(200,"獲取帖子列表") }else { c.String(200,"獲取用戶=%s的帖子列表",c.Query("username")) } })
//勞資仍是天下第一 router.GET("/v1/topics/:topic_id", func(c *gin.Context) { c.String(200,"獲取topicid=%s的帖子",c.Param("topic_id")) //Param是獲取路由的預留值 }) router.Run() // listen and serve on 0.0.0.0:8080 }
運行輸出router
完了,驚不驚喜,刺不刺激