Add rest router
diff --git a/core/kg/api/rest/router.go b/core/kg/api/rest/router.go
new file mode 100644
index 0000000..8e695f2
--- /dev/null
+++ b/core/kg/api/rest/router.go
@@ -0,0 +1,39 @@
+package rest
+
+import (
+	"net/http"
+
+	"github.com/gorilla/mux"
+)
+
+const APIURLSuffix = "/api/v1"
+
+type Routers struct {
+	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 {
+	apiRoot := root.PathPrefix(APIURLSuffix).Subrouter()
+	users := apiRoot.PathPrefix("/users").Subrouter()
+	user := apiRoot.PathPrefix("/users/{user_id:[A-Za-z0-9]+}").Subrouter()
+
+	routers := &Routers{
+		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")
+}
diff --git a/core/kg/api/rest/user_service.go b/core/kg/api/rest/user_service.go
new file mode 100644
index 0000000..91c7cb6
--- /dev/null
+++ b/core/kg/api/rest/user_service.go
@@ -0,0 +1,12 @@
+package rest
+
+import "net/http"
+
+func createUser(w http.ResponseWriter, r *http.Request) {
+}
+
+func getUsers(w http.ResponseWriter, r *http.Request) {
+}
+
+func getUser(w http.ResponseWriter, r *http.Request) {
+}
diff --git a/core/kg/rpc/user_service.go b/core/kg/api/rpc/user_service.go
similarity index 90%
rename from core/kg/rpc/user_service.go
rename to core/kg/api/rpc/user_service.go
index ee385cb..c424cee 100644
--- a/core/kg/rpc/user_service.go
+++ b/core/kg/api/rpc/user_service.go
@@ -3,6 +3,7 @@
 import (
 	"context"
 
+	"github.com/giolekva/pcloud/core/kg/common"
 	"github.com/giolekva/pcloud/core/kg/model/proto"
 	"github.com/pkg/errors"
 	"google.golang.org/protobuf/types/known/timestamppb"
@@ -10,11 +11,11 @@
 
 type userService struct {
 	proto.UnimplementedUserServiceServer
-	app appIface
+	app common.AppIface
 }
 
 // NewService returns new user service
-func NewService(app appIface) proto.UserServiceServer {
+func NewService(app common.AppIface) proto.UserServiceServer {
 	s := &userService{
 		app: app,
 	}
diff --git a/core/kg/rpc/user_service_test.go b/core/kg/api/rpc/user_service_test.go
similarity index 100%
rename from core/kg/rpc/user_service_test.go
rename to core/kg/api/rpc/user_service_test.go
diff --git a/core/kg/rpc/interfaces.go b/core/kg/rpc/interfaces.go
deleted file mode 100644
index 0cd072a..0000000
--- a/core/kg/rpc/interfaces.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package rpc
-
-import "github.com/giolekva/pcloud/core/kg/model"
-
-type appIface interface {
-	GetUser(userID string) (*model.User, error)
-}
diff --git a/core/kg/server/grpc_server.go b/core/kg/server/grpc_server.go
index 20aed55..af0b945 100644
--- a/core/kg/server/grpc_server.go
+++ b/core/kg/server/grpc_server.go
@@ -5,11 +5,11 @@
 	"net"
 	"os"
 
+	"github.com/giolekva/pcloud/core/kg/api/rpc"
 	"github.com/giolekva/pcloud/core/kg/common"
 	"github.com/giolekva/pcloud/core/kg/log"
 	"github.com/giolekva/pcloud/core/kg/model"
 	"github.com/giolekva/pcloud/core/kg/model/proto"
-	"github.com/giolekva/pcloud/core/kg/rpc"
 	"google.golang.org/grpc"
 )
 
diff --git a/core/kg/server/http_server.go b/core/kg/server/http_server.go
index 6b07914..dd8151a 100644
--- a/core/kg/server/http_server.go
+++ b/core/kg/server/http_server.go
@@ -8,6 +8,7 @@
 	"os"
 	"time"
 
+	"github.com/giolekva/pcloud/core/kg/api/rest"
 	"github.com/giolekva/pcloud/core/kg/common"
 	"github.com/giolekva/pcloud/core/kg/log"
 	"github.com/giolekva/pcloud/core/kg/model"
@@ -17,11 +18,11 @@
 
 // HTTPServerImpl http server implementation
 type HTTPServerImpl struct {
-	Log    common.LoggerIface
-	srv    *http.Server
-	root   *mux.Router
-	config *model.Config
-	store  store.Store
+	Log     common.LoggerIface
+	srv     *http.Server
+	routers *rest.Routers
+	config  *model.Config
+	store   store.Store
 }
 
 var _ Server = &HTTPServerImpl{}
@@ -29,10 +30,10 @@
 // NewHTTPServer creates new HTTP Server
 func NewHTTPServer(logger common.LoggerIface, config *model.Config, store store.Store) Server {
 	a := &HTTPServerImpl{
-		Log:    logger,
-		root:   mux.NewRouter(),
-		config: config,
-		store:  store,
+		Log:     logger,
+		routers: rest.NewRouter(mux.NewRouter()),
+		config:  config,
+		store:   store,
 	}
 
 	pwd, _ := os.Getwd()
@@ -46,7 +47,7 @@
 
 	a.srv = &http.Server{
 		Addr:         fmt.Sprintf("%s:%d", a.config.HTTP.Host, a.config.HTTP.Port),
-		Handler:      a.root,
+		Handler:      a.routers.Root,
 		ReadTimeout:  time.Duration(a.config.HTTP.ReadTimeout) * time.Second,
 		WriteTimeout: time.Duration(a.config.HTTP.WriteTimeout) * time.Second,
 		IdleTimeout:  time.Duration(a.config.HTTP.IdleTimeout) * time.Second,