api method up

This commit is contained in:
Denis Zheleztsov 2017-02-17 11:05:54 +03:00
parent eb205f541d
commit 6f7aa50604

View File

@ -3,8 +3,10 @@ package rest
import (
"encoding/json"
"github.com/gorilla/mux"
"io/ioutil"
"log"
"net/http"
"strings"
"time"
)
@ -50,15 +52,63 @@ func (zk ZooNode) LS(w http.ResponseWriter, r *http.Request) {
w.Write(data)
}
// ReadRequestBody ...
func ReadRequestBody(req *http.Request) ([]byte, error) {
body, err := ioutil.ReadAll(req.Body)
if err != nil {
return []byte(""), err
}
return body, err
}
// UP ...
func (zk ZooNode) UP(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
path := vars["path"]
ch := make(chan string)
// Read request body as []byte
content, err := ReadRequestBody(r)
if err != nil {
w.WriteHeader(500)
w.Write([]byte(err.Error()))
return
}
// Create node
if r.Method == "PUT" {
go func() { ch <- zk.CreateNode(path, content) }()
} else if r.Method == "POST" {
go func() { ch <- zk.UpdateNode(path, content) }()
} else {
e := strings.Join([]string{r.Method, "not alowed"}, " ")
w.WriteHeader(500)
w.Write([]byte(e))
return
}
defer r.Body.Close()
state := <-ch
w.WriteHeader(200)
w.Write([]byte(state))
}
// RM ...
func (zk ZooNode) RM(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
e := strings.Join([]string{r.Method, "not alowed"}, " ")
w.WriteHeader(500)
w.Write([]byte(e))
return
}
vars := mux.Vars(r)
path := vars["path"]
go func() { zk.RMR(path) }()
w.WriteHeader(200)
// w.Write(data)
}
// GET ...
@ -95,6 +145,7 @@ func Serve(listen string, zk ZooNode) {
r.HandleFunc("/v1/ls{path:[a-z0-9-_/.:]+}", zk.LS)
r.HandleFunc("/v1/get{path:[a-z0-9-_/.:]+}", zk.GET)
r.HandleFunc("/v1/rmr{path:[a-z0-9-_/.:]+}", zk.RM)
r.HandleFunc("/v1/up{path:[a-z0-9-_/.:]+}", zk.UP)
http.Handle("/", r)