golang restful urlインスタンス

16183 ワード

紹介する
restfulは、1つまたは複数のオブジェクト本体のcrud動作を記述するurlパスである、ここでは例を挙げる.
ソースコード
type User struct{
	Id int `json:"id"`
    Username string `json:"username"`
}
var users = []User{User{1, "Zhang San"}, User{2, "Li Si"}, User{3, "Wang Wu"}}
func main(){
    r := gin.Default()
    r.GET("/user/", ListUsers)
    r.GET("/user/:id/", GetUser)
    r.POST("/user/", AddUser)
    r.PATCH("/user/:id/", UpdateUser)
    r.DELETE("/user/:id/", DeleteUser)
    r.Run(":8080")
}
func ListUser(c *gin.Context){
    c.JSON(200, gin.H{"message":"success", "count":len(users), "data": users})
}
func GetUser(c *gin.Context){
    id := c.Param("id")
    for _,user:=range users{
       if id == strconv.ItoA(user.Id) {
           c.JSON(200, gin.H{"message":"success", "data": user})
           return
       }
    }
    c.JSON(400, gin.H{"message":fmt.Sprintf("id '%s' user not found", id)})
}
func AddUser(c *gin.Context){
    var user User
    c.Bind(&user)
    users = append(users, user)
    c.JSON(200, gin.H{"message":"success"})
}
func UpdateUser(c *gin.Context){
    id := c.Param("id")
    var user User
    c.Bind(&user)
    for i,user:=range users{
       if id == strconv.ItoA(user.Id) {
           users[i].Username = user.Username    
           c.JSON(200, gin.H{"message":"success", "data": users})
           return
       }
    }
    c.JSON(400, gin.H{"message": fmt.Sprintf("id '%s' user not found", id)})
}
func DeleteUser(c *gin.Context){
    id := c.Param("id")
    for i,user:=range users{
       if id == strconv.ItoA(user.Id) {
           users = append(users[:i], users[i+1:])
           c.JSON(200, gin.H{"message":"success", "data": users})
           return
       }
    }
    c.JSON(400, gin.H{"message": fmt.Sprintf("id '%s' user not found", id)})
}

複数のオブジェクトが要求された場合:
r.POST("/user/teacher/record/", nil)

オブジェクト名が長すぎる場合
r.POST("/user-password/", nil)

まとめ
  • は、/user/ではなく、終端閉ループ/userをルーティングする.
  • 無純動詞/user/click-record//user/click/record/
  • ではない.
  • アルパカなし下線なし/user/game/info//user_game_info/または/userGameInfo/
  • ではない.
    に付随
    以上は私のrestful標準で、異議の申し立てがあって、受け入れません.