Skip to content

Instantly share code, notes, and snippets.

@anidotnet
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anidotnet/9720936 to your computer and use it in GitHub Desktop.
Save anidotnet/9720936 to your computer and use it in GitHub Desktop.
sample go rest webservice
package main
import (
"os"
"code.google.com/p/gorest"
"net/http"
"time"
"log"
"github.com/jinzhu/gorm"
_ "github.com/go-sql-driver/mysql"
)
var db *gorm.DB
func main() {
ip := os.Getenv("OPENSHIFT_MYSQL_DB_HOST")
port := os.Getenv("OPENSHIFT_MYSQL_DB_PORT")
connString := "root:*******@tcp(" + ip + ":" + port + ")/blog?charset=utf8&parseTime=True"
gormDb, err := gorm.Open("mysql", connString)
db = &gormDb
if err != nil {
panic(err.Error())
}
db.LogMode(true)
//db.DB().SetMaxIdleConns(10)
//db.DB().SetMaxOpenConns(100)
db.DB().Ping()
db.SingularTable(true)
gorest.RegisterService(new(UserService))
http.Handle("/", gorest.Handle())
http.ListenAndServe(":8080", nil)
}
type User struct {
LoginId string
EmailId string
Passwd string
LastLogin time.Time
}
type UserService struct {
//Service level config
gorest.RestService `root:"/user/" consumes:"application/json" produces:"application/json"`
//End-Point level configs: Field names must be the same as the corresponding method names,
//but not-exported (starts with lowercase)
getUserById gorest.EndPoint `method:"GET" path:"/{userId:string}" output:"User"`
createUser gorest.EndPoint `method:"POST" path:"/create/" postdata:"User"`
deleteUser gorest.EndPoint `method:"DELETE" path:"/delete/{userId:string}"`
}
func (service UserService) GetUserById(userId string) (User) {
log.Println("entering to GetUserById with userId = " + userId)
var users []User
db.Where("login_id = ?", userId).Find(&users)
if users != nil && len(users) > 0 {
service.ResponseBuilder().SetResponseCode(200)
return users[0]
} else {
service.ResponseBuilder().SetResponseCode(404)
return User{}
}
}
func (service UserService) CreateUser(user User) {
log.Println("entering to CreateUser with loginId = " + user.LoginId)
if db.NewRecord(user) {
db.Table("user").Save(&user)
service.ResponseBuilder().SetResponseCode(201)
} else {
user.LoginId = ""
db.Table("user").Update(&user)
service.ResponseBuilder().SetResponseCode(200)
}
}
func (service UserService) DeleteUser(userId string) {
log.Println("entering to DeleteUser with loginId = " + userId)
db.Table("user").Where("login_id = ?", userId).Delete(&User{})
service.ResponseBuilder().SetResponseCode(200)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment