diff --git a/go.mod b/go.mod index 8864d21..4fd3abb 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-chi/chi/v5 v5.0.8 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/go.sum b/go.sum index 23d0f5e..784348a 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= +github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= diff --git a/service/http/service.go b/service/http/service.go index baa50b3..7e8b4f1 100644 --- a/service/http/service.go +++ b/service/http/service.go @@ -19,7 +19,7 @@ import ( "os" "time" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" "github.com/dapr/go-sdk/actor" "github.com/dapr/go-sdk/actor/config" @@ -34,13 +34,13 @@ func NewService(address string) common.Service { } // NewServiceWithMux creates new Service with existing http mux. -func NewServiceWithMux(address string, mux *mux.Router) common.Service { +func NewServiceWithMux(address string, mux *chi.Mux) common.Service { return newServer(address, mux) } -func newServer(address string, router *mux.Router) *Server { +func newServer(address string, router *chi.Mux) *Server { if router == nil { - router = mux.NewRouter() + router = chi.NewRouter() } return &Server{ address: address, @@ -57,7 +57,7 @@ func newServer(address string, router *mux.Router) *Server { // Server is the HTTP server wrapping mux many Dapr helpers. type Server struct { address string - mux *mux.Router + mux *chi.Mux httpServer *http.Server topicRegistrar internal.TopicRegistrar authToken string diff --git a/service/http/topic.go b/service/http/topic.go index ed3bfdb..3cc00f0 100644 --- a/service/http/topic.go +++ b/service/http/topic.go @@ -20,7 +20,7 @@ import ( "io" "net/http" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" actorErr "github.com/dapr/go-sdk/actor/error" "github.com/dapr/go-sdk/actor/runtime" @@ -86,7 +86,7 @@ func (s *Server) registerBaseHandler() { fHealth := func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) } - s.mux.HandleFunc("/healthz", fHealth).Methods(http.MethodGet) + s.mux.Get("/healthz", fHealth) // register actor config handler fRegister := func(w http.ResponseWriter, r *http.Request) { @@ -100,14 +100,13 @@ func (s *Server) registerBaseHandler() { return } } - s.mux.HandleFunc("/dapr/config", fRegister).Methods(http.MethodGet) + s.mux.Get("/dapr/config", fRegister) // register actor method invoke handler fInvoke := func(w http.ResponseWriter, r *http.Request) { - varsMap := mux.Vars(r) - actorType := varsMap["actorType"] - actorID := varsMap["actorId"] - methodName := varsMap["methodName"] + actorType := chi.URLParam(r, "actorType") + actorID := chi.URLParam(r, "actorId") + methodName := chi.URLParam(r, "methodName") reqData, _ := io.ReadAll(r.Body) rspData, err := runtime.GetActorRuntimeInstance().InvokeActorMethod(actorType, actorID, methodName, reqData) if err == actorErr.ErrActorTypeNotFound { @@ -121,13 +120,12 @@ func (s *Server) registerBaseHandler() { w.WriteHeader(http.StatusOK) _, _ = w.Write(rspData) } - s.mux.HandleFunc("/actors/{actorType}/{actorId}/method/{methodName}", fInvoke).Methods(http.MethodPut) + s.mux.Put("/actors/{actorType}/{actorId}/method/{methodName}", fInvoke) // register deactivate actor handler fDelete := func(w http.ResponseWriter, r *http.Request) { - varsMap := mux.Vars(r) - actorType := varsMap["actorType"] - actorID := varsMap["actorId"] + actorType := chi.URLParam(r, "actorType") + actorID := chi.URLParam(r, "actorId") err := runtime.GetActorRuntimeInstance().Deactivate(actorType, actorID) if err == actorErr.ErrActorTypeNotFound || err == actorErr.ErrActorIDNotFound { w.WriteHeader(http.StatusNotFound) @@ -137,14 +135,13 @@ func (s *Server) registerBaseHandler() { } w.WriteHeader(http.StatusOK) } - s.mux.HandleFunc("/actors/{actorType}/{actorId}", fDelete).Methods(http.MethodDelete) + s.mux.Delete("/actors/{actorType}/{actorId}", fDelete) // register actor reminder invoke handler fReminder := func(w http.ResponseWriter, r *http.Request) { - varsMap := mux.Vars(r) - actorType := varsMap["actorType"] - actorID := varsMap["actorId"] - reminderName := varsMap["reminderName"] + actorType := chi.URLParam(r, "actorType") + actorID := chi.URLParam(r, "actorId") + reminderName := chi.URLParam(r, "reminderName") reqData, _ := io.ReadAll(r.Body) err := runtime.GetActorRuntimeInstance().InvokeReminder(actorType, actorID, reminderName, reqData) if err == actorErr.ErrActorTypeNotFound { @@ -155,14 +152,13 @@ func (s *Server) registerBaseHandler() { } w.WriteHeader(http.StatusOK) } - s.mux.HandleFunc("/actors/{actorType}/{actorId}/method/remind/{reminderName}", fReminder).Methods(http.MethodPut) + s.mux.Put("/actors/{actorType}/{actorId}/method/remind/{reminderName}", fReminder) // register actor timer invoke handler fTimer := func(w http.ResponseWriter, r *http.Request) { - varsMap := mux.Vars(r) - actorType := varsMap["actorType"] - actorID := varsMap["actorId"] - timerName := varsMap["timerName"] + actorType := chi.URLParam(r, "actorType") + actorID := chi.URLParam(r, "actorId") + timerName := chi.URLParam(r, "timerName") reqData, _ := io.ReadAll(r.Body) err := runtime.GetActorRuntimeInstance().InvokeTimer(actorType, actorID, timerName, reqData) if err == actorErr.ErrActorTypeNotFound { @@ -173,7 +169,7 @@ func (s *Server) registerBaseHandler() { } w.WriteHeader(http.StatusOK) } - s.mux.HandleFunc("/actors/{actorType}/{actorId}/method/timer/{timerName}", fTimer).Methods(http.MethodPut) + s.mux.Put("/actors/{actorType}/{actorId}/method/timer/{timerName}", fTimer) } // AddTopicEventHandler appends provided event handler with it's name to the service.