From b4b8225cbfe32013d253843299580f0ca26da56d Mon Sep 17 00:00:00 2001 From: miraclesu Date: Tue, 9 Jul 2013 15:16:28 +0800 Subject: [PATCH] an example for api application --- apiapp.go | 145 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 87 insertions(+), 58 deletions(-) diff --git a/apiapp.go b/apiapp.go index af78fc3..d04734f 100644 --- a/apiapp.go +++ b/apiapp.go @@ -24,7 +24,7 @@ In the appname folder has the follow struct: │   └── default.go ├── main.go └── models - └── default.go + └── object.go `, } @@ -34,109 +34,142 @@ appname = {{.Appname}} httpport = 8080 runmode = dev autorender = false +copyrequestbody = true ` var apiMaingo = `package main import ( - "{{.Appname}}/controllers" "github.com/astaxie/beego" + "{{.Appname}}/controllers" ) +// Objects + +// URL HTTP Verb Functionality +// /object POST Creating Objects +// /object/ GET Retrieving Objects +// /object/ PUT Updating Objects +// /object GET Queries +// /object/ DELETE Deleting Objects + func main() { - beego.Router("/{{.Version}}/users/:objectId", &controllers.UserController{}) - beego.Router("/{{.Version}}/users", &controllers.UserController{}) + beego.RESTRouter("/object", &controllers.ObejctController{}) beego.Run() } ` var apiModels = `package models -type User struct { - Id interface{} - Name string - Email string +import ( + "errors" + "strconv" + "time" +) + +var ( + Objects map[string]*Object +) + +type Object struct { + ObjectId string + Score int64 + PlayerName string } -func (this *User) One(id interface{}) (user User, err error) { - // get user from DB - // user, err = query(id) - user = User{id, "astaxie", "astaxie@gmail.com"} - return +func init() { + Objects = make(map[string]*Object) + Objects["hjkhsbnmn123"] = &Object{"hjkhsbnmn123", 100, "astaxie"} + Objects["mjjkxsxsaa23"] = &Object{"mjjkxsxsaa23", 101, "someone"} } -func (this *User) All() (users []User, err error) { - // get all users from DB - // users, err = queryAll() - users = append([]User{}, User{1, "astaxie", "astaxie@gmail.com"}) - users = append(users, User{2, "someone", "someone@gmail.com"}) - return +func AddOne(object Object) (ObjectId string) { + object.ObjectId = "astaxie" + strconv.FormatInt(time.Now().UnixNano(), 10) + Objects[object.ObjectId] = &object + return object.ObjectId } -func (this *User) Update(id interface{}) (err error) { - // user, err = update(id, this) - return +func GetOne(ObjectId string) (object *Object, err error) { + if v, ok := Objects[ObjectId]; ok { + return v, nil + } + return nil, errors.New("ObjectId Not Exist") } +func GetAll() map[string]*Object { + return Objects +} + +func Update(ObjectId string, Score int64) (err error) { + if v, ok := Objects[ObjectId]; ok { + v.Score = Score + return nil + } + return errors.New("ObjectId Not Exist") +} + +func Delete(ObjectId string) { + delete(Objects, ObjectId) +} ` var apiControllers = `package controllers import ( "encoding/json" - "{{.Appname}}/models" "github.com/astaxie/beego" - "io/ioutil" + "{{.Appname}}/models" ) -type UserController struct { +type ResponseInfo struct { +} + +type ObejctController struct { beego.Controller } -func (this *UserController) Get() { - var user models.User +func (this *ObejctController) Post() { + var ob models.Object + json.Unmarshal(this.Ctx.RequestBody, &ob) + objectid := models.AddOne(ob) + this.Data["json"] = "{\"ObjectId\":\"" + objectid + "\"}" + this.ServeJson() +} + +func (this *ObejctController) Get() { objectId := this.Ctx.Params[":objectId"] if objectId != "" { - user, err := user.One(objectId) + ob, err := models.GetOne(objectId) if err != nil { this.Data["json"] = err } else { - this.Data["json"] = user + this.Data["json"] = ob } } else { - users, err := user.All() - if err != nil { - this.Data["json"] = err - } else { - this.Data["json"] = users - } + obs := models.GetAll() + this.Data["json"] = obs } this.ServeJson() } -func (this *UserController) Put() { - defer this.ServeJson() - var user models.User +func (this *ObejctController) Put() { objectId := this.Ctx.Params[":objectId"] + var ob models.Object + json.Unmarshal(this.Ctx.RequestBody, &ob) - body, err := ioutil.ReadAll(this.Ctx.Request.Body) - if err != nil { - this.Data["json"] = err - return - } - this.Ctx.Request.Body.Close() - - if err = json.Unmarshal(body, &user); err != nil { - this.Data["json"] = err - return - } - - err = user.Update(objectId) + err := models.Update(objectId, ob.Score) if err != nil { this.Data["json"] = err } else { this.Data["json"] = "update success!" } + this.ServeJson() } +func (this *ObejctController) Delete() { + objectId := this.Ctx.Params[":objectId"] + models.Delete(objectId) + this.Data["json"] = "delete success!" + this.ServeJson() +} ` func init() { @@ -144,10 +177,7 @@ func init() { } func createapi(cmd *Command, args []string) { - version := "1" - if len(args) == 2 { - version = args[1] - } else if len(args) != 1 { + if len(args) != 1 { fmt.Println("error args") os.Exit(2) } @@ -173,11 +203,10 @@ func createapi(cmd *Command, args []string) { writetofile(path.Join(apppath, "controllers", "default.go"), strings.Replace(apiControllers, "{{.Appname}}", packpath, -1)) - fmt.Println("create models default.go:", path.Join(apppath, "models", "default.go")) - writetofile(path.Join(apppath, "models", "default.go"), apiModels) + fmt.Println("create models object.go:", path.Join(apppath, "models", "object.go")) + writetofile(path.Join(apppath, "models", "object.go"), apiModels) fmt.Println("create main.go:", path.Join(apppath, "main.go")) - apiMaingo = strings.Replace(apiMaingo, "{{.Version}}", version, -1) writetofile(path.Join(apppath, "main.go"), strings.Replace(apiMaingo, "{{.Appname}}", packpath, -1)) }