Skip to content

Instantly share code, notes, and snippets.

@IftekherSunny
Forked from peterhellberg/api.go
Created June 28, 2017 10:00
Show Gist options
  • Save IftekherSunny/3dbfdde9218bb4b7f636aae3a1c9e613 to your computer and use it in GitHub Desktop.
Save IftekherSunny/3dbfdde9218bb4b7f636aae3a1c9e613 to your computer and use it in GitHub Desktop.
A tiny example API written in Go using Martini and Redigo
package main
import (
"flag"
"fmt"
"net/http"
"github.com/codegangsta/martini"
"github.com/garyburd/redigo/redis"
"github.com/martini-contrib/render"
)
var (
redisAddress = flag.String("redis-address", ":6379", "Address to the Redis server")
maxConnections = flag.Int("max-connections", 10, "Max connections to Redis")
)
func main() {
martini.Env = martini.Prod
flag.Parse()
redisPool := redis.NewPool(func() (redis.Conn, error) {
c, err := redis.Dial("tcp", *redisAddress)
if err != nil {
return nil, err
}
return c, err
}, *maxConnections)
defer redisPool.Close()
m := martini.Classic()
m.Map(redisPool)
m.Use(render.Renderer())
m.Get("/", func() string {
return "Hello from Martini!"
})
m.Get("/set/:key", func(r render.Render, pool *redis.Pool, params martini.Params, req *http.Request) {
key := params["key"]
value := req.URL.Query().Get("value")
c := pool.Get()
defer c.Close()
status, err := c.Do("SET", key, value)
if err != nil {
message := fmt.Sprintf("Could not SET %s:%s", key, value)
r.JSON(400, map[string]interface{}{
"status": "ERR",
"message": message})
} else {
r.JSON(200, map[string]interface{}{
"status": status})
}
})
m.Get("/get/:key", func(r render.Render, pool *redis.Pool, params martini.Params) {
key := params["key"]
c := pool.Get()
defer c.Close()
value, err := redis.String(c.Do("GET", key))
if err != nil {
message := fmt.Sprintf("Could not GET %s", key)
r.JSON(400, map[string]interface{}{
"status": "ERR",
"message": message})
} else {
r.JSON(200, map[string]interface{}{
"status": "OK",
"value": value})
}
})
m.Run()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment