From 7bbc05e0b7739b53301af51b8258e1a20b058261 Mon Sep 17 00:00:00 2001 From: Denis Zheleztsov Date: Fri, 17 Feb 2017 13:31:40 +0300 Subject: [PATCH] Readme --- README.md | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..66b783b --- /dev/null +++ b/README.md @@ -0,0 +1,198 @@ +# Zoorest + +Zookeeper HTTP rest API + +## Usage + +``` +Usage of ./zoorest: + -listen string + Address to listen (default "127.0.0.1:8889") + -path string + Zk root path (default "/") + -zk string + Zk servers. Comma separated (default "127.0.0.1:2181") +``` + +## API + +### List node childrens + +Method: **GET** + +Location: **/v1/ls** + +Return JSON +```json +curl -s -XGET http://127.0.0.1:8889/v1/ls/ | jq +{ + "childrens": [ + "two", + "three", + "one" + ], + "path": "/zoorest", + "state": "OK", + "error": "" +} +``` + +#### Errors + +```json +curl -s -XGET http://127.0.0.1:8889/v1/ls/does/not/exist | jq +{ + "childrens": null, + "path": "", + "state": "ERROR", + "error": "zk: node does not exist" +} +``` + +### Get node data + +Method: **GET** + +Location: **/v1/get** + +Return JSON +``` +curl -s -XGET http://127.0.0.1:8889/v1/get/one/data | jq +{ + "path": "/zoorest/one/data", + "state": "OK", + "error": "", + "data": "eyJzb21lIjogImpzb24ifQ==" +} +``` +Node data stored in *data* field as base64 encoded string +``` +echo eyJzb21lIjogImpzb24ifQ== | base64 -d +{"some": "json"} +``` + +#### Errors + +```json + curl -s -XGET http://127.0.0.1:8889/v1/get/does/not/exist | jq +{ + "path": "", + "state": "ERROR", + "error": "zk: node does not exist", + "data": null +} +``` + +### Create node recursive + +Method: **PUT** + +Location: **/v1/up** + +Return string with created path +``` +curl -XPUT http://127.0.0.1:8889/v1/up/two/three/four -d '{"four": "json"}' +/zoorest/two/three/four +``` + +### Update node + +Method: **POST** + +Location: **/v1/up** + +Return string with updated path +``` +curl -XPOST http://127.0.0.1:8889/v1/up/two -d '{"two": "json"}' +/zoorest/two +``` + +#### Errors + +``` +curl -XPOST http://127.0.0.1:8889/v1/up/twa -d '{"two": "json"}' +zk: node does not exist +``` + +### Delete node recursive +Method: **DELETE** + +Location: **/v1/rmr** + +Return string with removed path +``` +curl -XDELETE http://127.0.0.1:8889/v1/rmr/two +/zoorest/two +``` + +#### Errors +``` +curl -XPOST http://127.0.0.1:8889/v1/rmr/two +Method POST not alowed +``` + +## Build + +### Binary + +Set GOPATH variable +``` +export GOPATH ${HOME}/.local +``` + +Get source code +``` +go get github.com/Difrex/zoorest/rest +``` + +Get dependencies +``` +cd ${GOPATH}/src/github.com/Difrex/zoorest +go get -t -v ./... +``` + +Build staticaly linked binary +``` +go build -ldflags "-linkmode external -extldflags -static" +``` + +Build dynamicaly linked binary +``` +go build +``` + +Build dynamicaly linked binary with gcc +``` +go build -compile gccgo +``` + +### Docker build + +#### Binary file + +Build binary file +``` +git clone https://github.com/Difrex/zoorest.git +cd zoorest +./build.sh +``` +Result binary file will be placed in out/ dir + +#### Docker image + +Build Alpine based docker image +``` +git clone https://github.com/Difrex/zoorest.git +cd zoorest +./build.sh alpine +``` + +Image will be tagged as zoorest:latest + +# AUTHORS + +Denis Zheleztsov + +# LICENSE + +GPLv3 see [LICENSE](LICENSE)