Add get user resp api endpoint
diff --git a/core/kg/api/rest/handler.go b/core/kg/api/rest/handler.go
new file mode 100644
index 0000000..dbc5882
--- /dev/null
+++ b/core/kg/api/rest/handler.go
@@ -0,0 +1,43 @@
+package rest
+
+import (
+	"encoding/json"
+	"net/http"
+)
+
+type HandlerFunc func(w http.ResponseWriter, r *http.Request) error
+
+// ServeHTTP calls f(w, r) and handles error
+func (f HandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+	if err := f(w, r); err != nil {
+		jsoner(w, http.StatusBadRequest, err.Error()) // TODO detect the correct statusCode from error
+	}
+}
+
+func jsoner(w http.ResponseWriter, statusCode int, payload interface{}) error {
+	w.Header().Set("Content-Type", "application/json")
+
+	// If there is nothing to marshal then set status code and return.
+	if payload == nil {
+		_, err := w.Write([]byte("{}"))
+		return err
+	}
+
+	if statusCode != http.StatusOK {
+		w.WriteHeader(statusCode)
+	}
+
+	encoder := json.NewEncoder(w)
+	encoder.SetEscapeHTML(true)
+	encoder.SetIndent("", "")
+
+	if err := encoder.Encode(payload); err != nil {
+		return err
+	}
+
+	if f, ok := w.(http.Flusher); ok {
+		f.Flush()
+	}
+
+	return nil
+}
diff --git a/core/kg/api/rest/router.go b/core/kg/api/rest/router.go
index 8e695f2..c0bb33a 100644
--- a/core/kg/api/rest/router.go
+++ b/core/kg/api/rest/router.go
@@ -3,37 +3,43 @@
 import (
 	"net/http"
 
+	"github.com/giolekva/pcloud/core/kg/common"
 	"github.com/gorilla/mux"
 )
 
 const APIURLSuffix = "/api/v1"
 
-type Routers struct {
+type Router struct {
+	App    common.AppIface
+	Logger common.LoggerIface
+
 	Root    *mux.Router // ''
 	APIRoot *mux.Router // 'api/v1'
 	Users   *mux.Router // 'api/v1/users'
 	User    *mux.Router // 'api/v1/users/{user_id:[A-Za-z0-9]+}'
 }
 
-func NewRouter(root *mux.Router) *Routers {
+func NewRouter(root *mux.Router, app common.AppIface, logger common.LoggerIface) *Router {
 	apiRoot := root.PathPrefix(APIURLSuffix).Subrouter()
 	users := apiRoot.PathPrefix("/users").Subrouter()
 	user := apiRoot.PathPrefix("/users/{user_id:[A-Za-z0-9]+}").Subrouter()
 
-	routers := &Routers{
+	routers := &Router{
+		App:    app,
+		Logger: logger,
+
 		Root:    root,
 		APIRoot: apiRoot,
 		Users:   users,
 		User:    user,
 	}
+
 	root.Handle("/api/v1/{anything:.*}", http.HandlerFunc(http.NotFound))
 	routers.initUsers()
 
 	return routers
 }
 
-func (r *Routers) initUsers() {
-	r.Users.Handle("", http.HandlerFunc(createUser)).Methods("POST")
-	r.Users.Handle("", http.HandlerFunc(getUsers)).Methods("GET")
-	r.User.Handle("", http.HandlerFunc(getUser)).Methods("GET")
+func (router *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+	router.Root.ServeHTTP(w, req)
 }
diff --git a/core/kg/api/rest/user_service.go b/core/kg/api/rest/user_service.go
index 91c7cb6..c129b78 100644
--- a/core/kg/api/rest/user_service.go
+++ b/core/kg/api/rest/user_service.go
@@ -1,12 +1,52 @@
 package rest
 
-import "net/http"
+import (
+	"net/http"
 
-func createUser(w http.ResponseWriter, r *http.Request) {
+	"github.com/gorilla/mux"
+	"github.com/pkg/errors"
+)
+
+func (router *Router) initUsers() {
+	router.Users.Handle("", router.buildCreateUserHandler()).Methods("POST")
+	router.Users.Handle("", router.buildGetUsersHandler()).Methods("GET")
+	router.User.Handle("", router.buildGetUserHandler()).Methods("GET")
 }
 
-func getUsers(w http.ResponseWriter, r *http.Request) {
+func (router *Router) buildCreateUserHandler() http.Handler {
+	fn := func(w http.ResponseWriter, r *http.Request) error {
+		router.Logger.Debug("Rest API: create user")
+		return nil
+	}
+	return HandlerFunc(fn)
 }
 
-func getUser(w http.ResponseWriter, r *http.Request) {
+func (router *Router) buildGetUsersHandler() http.Handler {
+	fn := func(w http.ResponseWriter, r *http.Request) error {
+		router.Logger.Debug("Rest API: get users")
+		return nil
+	}
+	return HandlerFunc(fn)
+}
+
+func (router *Router) buildGetUserHandler() http.Handler {
+	fn := func(w http.ResponseWriter, r *http.Request) error {
+		router.Logger.Debug("Rest API: get user")
+		params := mux.Vars(r)
+
+		var userID string
+		var ok bool
+		if userID, ok = params["user_id"]; !ok {
+			return errors.New("missing parameter: user_id")
+		}
+		user, err := router.App.GetUser(userID)
+
+		if err != nil {
+			return errors.Wrapf(err, "can't get user from app")
+		}
+
+		jsoner(w, http.StatusOK, user)
+		return nil
+	}
+	return HandlerFunc(fn)
 }