This is an automated email from the ASF dual-hosted git repository.

tianxiaoliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new 809130f  Fix: websocket does not work after refactor router (#1006)
809130f is described below

commit 809130ff3dbbb28738c6fde7ca25815a5bf43f5c
Author: little-cui <sure_0...@qq.com>
AuthorDate: Wed May 26 10:14:22 2021 +0800

    Fix: websocket does not work after refactor router (#1006)
---
 pkg/rest/common.go                                 |  5 ----
 server/broker/controller.go                        |  6 ++---
 server/handler/exception/exception.go              | 31 ++++++++++++++++++----
 server/rest/admin/controller_v4.go                 |  6 ++---
 server/rest/controller/v3/dependency_controller.go | 10 ++++---
 server/rest/controller/v3/instance_controller.go   | 20 +++++++-------
 server/rest/controller/v3/instance_watcher.go      |  4 ++-
 server/rest/controller/v3/main_controller.go       |  4 +--
 .../rest/controller/v3/microservice_controller.go  | 16 ++++++-----
 server/rest/controller/v3/query_rule_controller.go | 10 ++++---
 server/rest/controller/v3/schema_controller.go     | 12 +++++----
 server/rest/controller/v3/tag_controller.go        | 10 ++++---
 server/rest/controller/v4/dependency_controller.go |  8 +++---
 server/rest/controller/v4/instance_controller.go   | 20 +++++++-------
 server/rest/controller/v4/instance_watcher.go      | 15 +++++++++--
 server/rest/controller/v4/main_controller.go       |  4 +--
 .../rest/controller/v4/microservice_controller.go  | 14 +++++-----
 server/rest/controller/v4/query_rule_controller.go |  8 +++---
 server/rest/controller/v4/schema_controller.go     | 12 ++++-----
 server/rest/controller/v4/tag_controller.go        |  8 +++---
 server/rest/govern/controller_v3.go                |  8 +++---
 server/rest/govern/controller_v4.go                | 10 +++----
 syncer/pkg/mock/mockservicecenter/servicecenter.go | 16 +++++------
 23 files changed, 150 insertions(+), 107 deletions(-)

diff --git a/pkg/rest/common.go b/pkg/rest/common.go
index f99651f..eecb7eb 100644
--- a/pkg/rest/common.go
+++ b/pkg/rest/common.go
@@ -24,11 +24,6 @@ import (
 )
 
 const (
-       HTTPMethodGet    = http.MethodGet
-       HTTPMethodPut    = http.MethodPut
-       HTTPMethodPost   = http.MethodPost
-       HTTPMethodDelete = http.MethodDelete
-
        CtxResponse       util.CtxKey = "_server_response"
        CtxRequest        util.CtxKey = "_server_request"
        CtxMatchPattern   util.CtxKey = "_server_match_pattern"
diff --git a/server/broker/controller.go b/server/broker/controller.go
index 7f48226..c2ca4f4 100644
--- a/server/broker/controller.go
+++ b/server/broker/controller.go
@@ -42,7 +42,7 @@ func (brokerService *Controller) URLPatterns() []rest.Route {
                {Method: http.MethodGet,
                        Path: "/",
                        Func: brokerService.GetHome},
-               {Method: rest.HTTPMethodPut,
+               {Method: http.MethodPut,
                        Path: 
"/pacts/provider/:providerId/consumer/:consumerId/version/:number",
                        Func: brokerService.PublishPact},
                {Method: http.MethodGet,
@@ -51,10 +51,10 @@ func (brokerService *Controller) URLPatterns() []rest.Route 
{
                {Method: http.MethodGet,
                        Path: 
"/pacts/provider/:providerId/consumer/:consumerId/version/:number",
                        Func: brokerService.GetPactsOfProvider},
-               {Method: rest.HTTPMethodDelete,
+               {Method: http.MethodDelete,
                        Path: "/pacts/delete",
                        Func: brokerService.DeletePacts},
-               {Method: rest.HTTPMethodPost,
+               {Method: http.MethodPost,
                        Path: 
"/pacts/provider/:providerId/consumer/:consumerId/pact-version/:sha/verification-results",
                        Func: brokerService.PublishVerificationResults},
                {Method: http.MethodGet,
diff --git a/server/handler/exception/exception.go 
b/server/handler/exception/exception.go
index b711dd4..9d9ef76 100644
--- a/server/handler/exception/exception.go
+++ b/server/handler/exception/exception.go
@@ -18,26 +18,37 @@
 package exception
 
 import (
+       "fmt"
+       "net/http"
+
        "github.com/apache/servicecomb-service-center/pkg/chain"
        "github.com/apache/servicecomb-service-center/pkg/errors"
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/pkg/util"
        "github.com/go-chassis/cari/discovery"
-       "net/http"
 )
 
+var whitelists = make(map[string]struct{})
+
 // Handler provide a common response writer to handle exceptions
 type Handler struct {
 }
 
 func (l *Handler) Handle(i *chain.Invocation) {
-       w, r := i.Context().Value(rest.CtxResponse).(http.ResponseWriter),
-               i.Context().Value(rest.CtxRequest).(*http.Request)
+       w, r, apiPath := 
i.Context().Value(rest.CtxResponse).(http.ResponseWriter),
+               i.Context().Value(rest.CtxRequest).(*http.Request),
+               i.Context().Value(rest.CtxMatchPattern).(string)
 
-       asyncWriter := NewWriter(w)
-       util.SetRequestContext(r, rest.CtxResponse, asyncWriter)
+       i.WithContext(rest.CtxResponseStatus, http.StatusOK)
 
+       if InWhitelist(r.Method, apiPath) {
+               i.Next()
+               return
+       }
+
+       asyncWriter := NewWriter(w)
+       i.WithContext(rest.CtxResponse, asyncWriter)
        i.Next(chain.WithFunc(func(ret chain.Result) {
                if !ret.OK {
                        i.WithContext(rest.CtxResponseStatus, 
l.responseError(w, ret.Err))
@@ -83,3 +94,13 @@ func (l *Handler) responseError(w http.ResponseWriter, e 
error) (statusCode int)
 func RegisterHandlers() {
        chain.RegisterHandler(rest.ServerChainName, &Handler{})
 }
+
+func RegisterWhitelist(method, apiPath string) {
+       whitelists[method+" "+apiPath] = struct{}{}
+       log.Debug(fmt.Sprintf("skip handle api [%s]%s exceptions", method, 
apiPath))
+}
+
+func InWhitelist(method, apiPath string) bool {
+       _, ok := whitelists[method+" "+apiPath]
+       return ok
+}
diff --git a/server/rest/admin/controller_v4.go 
b/server/rest/admin/controller_v4.go
index b2c5744..16026f8 100644
--- a/server/rest/admin/controller_v4.go
+++ b/server/rest/admin/controller_v4.go
@@ -36,9 +36,9 @@ type ControllerV4 struct {
 func (ctrl *ControllerV4) URLPatterns() []rest.Route {
        return []rest.Route{
                {Method: http.MethodGet, Path: "/v4/:project/admin/alarms", 
Func: ctrl.AlarmList},
-               {Method: rest.HTTPMethodDelete, Path: 
"/v4/:project/admin/alarms", Func: ctrl.ClearAlarm},
-               {Method: rest.HTTPMethodGet, Path: "/v4/:project/admin/dump", 
Func: ctrl.Dump},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/admin/clusters", Func: ctrl.Clusters},
+               {Method: http.MethodDelete, Path: "/v4/:project/admin/alarms", 
Func: ctrl.ClearAlarm},
+               {Method: http.MethodGet, Path: "/v4/:project/admin/dump", Func: 
ctrl.Dump},
+               {Method: http.MethodGet, Path: "/v4/:project/admin/clusters", 
Func: ctrl.Clusters},
        }
 }
 
diff --git a/server/rest/controller/v3/dependency_controller.go 
b/server/rest/controller/v3/dependency_controller.go
index 11b7351..9f2f9e7 100644
--- a/server/rest/controller/v3/dependency_controller.go
+++ b/server/rest/controller/v3/dependency_controller.go
@@ -17,6 +17,8 @@
 package v3
 
 import (
+       "net/http"
+
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/server/rest/controller/v4"
 )
@@ -27,9 +29,9 @@ type DependencyService struct {
 
 func (this *DependencyService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {rest.HTTPMethodPost, "/registry/v3/dependencies", 
this.AddDependenciesForMicroServices},
-               {rest.HTTPMethodPut, "/registry/v3/dependencies", 
this.CreateDependenciesForMicroServices},
-               {rest.HTTPMethodGet, 
"/registry/v3/microservices/:consumerId/providers", this.GetConProDependencies},
-               {rest.HTTPMethodGet, 
"/registry/v3/microservices/:providerId/consumers", this.GetProConDependencies},
+               {http.MethodPost, "/registry/v3/dependencies", 
this.AddDependenciesForMicroServices},
+               {http.MethodPut, "/registry/v3/dependencies", 
this.CreateDependenciesForMicroServices},
+               {http.MethodGet, 
"/registry/v3/microservices/:consumerId/providers", this.GetConProDependencies},
+               {http.MethodGet, 
"/registry/v3/microservices/:providerId/consumers", this.GetProConDependencies},
        }
 }
diff --git a/server/rest/controller/v3/instance_controller.go 
b/server/rest/controller/v3/instance_controller.go
index 2dc8b73..8504d37 100644
--- a/server/rest/controller/v3/instance_controller.go
+++ b/server/rest/controller/v3/instance_controller.go
@@ -17,6 +17,8 @@
 package v3
 
 import (
+       "net/http"
+
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/server/rest/controller/v4"
 )
@@ -27,14 +29,14 @@ type MicroServiceInstanceService struct {
 
 func (this *MicroServiceInstanceService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {rest.HTTPMethodGet, "/registry/v3/instances", 
this.FindInstances},
-               {rest.HTTPMethodGet, 
"/registry/v3/microservices/:serviceId/instances", this.GetInstances},
-               {rest.HTTPMethodGet, 
"/registry/v3/microservices/:serviceId/instances/:instanceId", 
this.GetOneInstance},
-               {rest.HTTPMethodPost, 
"/registry/v3/microservices/:serviceId/instances", this.RegisterInstance},
-               {rest.HTTPMethodDelete, 
"/registry/v3/microservices/:serviceId/instances/:instanceId", 
this.UnregisterInstance},
-               {rest.HTTPMethodPut, 
"/registry/v3/microservices/:serviceId/instances/:instanceId/properties", 
this.UpdateMetadata},
-               {rest.HTTPMethodPut, 
"/registry/v3/microservices/:serviceId/instances/:instanceId/status", 
this.UpdateStatus},
-               {rest.HTTPMethodPut, 
"/registry/v3/microservices/:serviceId/instances/:instanceId/heartbeat", 
this.Heartbeat},
-               {rest.HTTPMethodPut, "/registry/v3/heartbeats", 
this.HeartbeatSet},
+               {http.MethodGet, "/registry/v3/instances", this.FindInstances},
+               {http.MethodGet, 
"/registry/v3/microservices/:serviceId/instances", this.GetInstances},
+               {http.MethodGet, 
"/registry/v3/microservices/:serviceId/instances/:instanceId", 
this.GetOneInstance},
+               {http.MethodPost, 
"/registry/v3/microservices/:serviceId/instances", this.RegisterInstance},
+               {http.MethodDelete, 
"/registry/v3/microservices/:serviceId/instances/:instanceId", 
this.UnregisterInstance},
+               {http.MethodPut, 
"/registry/v3/microservices/:serviceId/instances/:instanceId/properties", 
this.UpdateMetadata},
+               {http.MethodPut, 
"/registry/v3/microservices/:serviceId/instances/:instanceId/status", 
this.UpdateStatus},
+               {http.MethodPut, 
"/registry/v3/microservices/:serviceId/instances/:instanceId/heartbeat", 
this.Heartbeat},
+               {http.MethodPut, "/registry/v3/heartbeats", this.HeartbeatSet},
        }
 }
diff --git a/server/rest/controller/v3/instance_watcher.go 
b/server/rest/controller/v3/instance_watcher.go
index 6d0690b..809a77a 100644
--- a/server/rest/controller/v3/instance_watcher.go
+++ b/server/rest/controller/v3/instance_watcher.go
@@ -17,6 +17,8 @@
 package v3
 
 import (
+       "net/http"
+
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/server/rest/controller/v4"
 )
@@ -27,6 +29,6 @@ type WatchService struct {
 
 func (this *WatchService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {rest.HTTPMethodGet, 
"/registry/v3/microservices/:serviceId/watcher", this.Watch},
+               {http.MethodGet, 
"/registry/v3/microservices/:serviceId/watcher", this.Watch},
        }
 }
diff --git a/server/rest/controller/v3/main_controller.go 
b/server/rest/controller/v3/main_controller.go
index 7735496..3720ee4 100644
--- a/server/rest/controller/v3/main_controller.go
+++ b/server/rest/controller/v3/main_controller.go
@@ -49,8 +49,8 @@ type MainService struct {
 
 func (s *MainService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {rest.HTTPMethodGet, "/version", s.GetVersion},
-               {rest.HTTPMethodGet, "/health", s.ClusterHealth},
+               {http.MethodGet, "/version", s.GetVersion},
+               {http.MethodGet, "/health", s.ClusterHealth},
        }
 }
 
diff --git a/server/rest/controller/v3/microservice_controller.go 
b/server/rest/controller/v3/microservice_controller.go
index 11a8c6a..3effe4f 100644
--- a/server/rest/controller/v3/microservice_controller.go
+++ b/server/rest/controller/v3/microservice_controller.go
@@ -17,6 +17,8 @@
 package v3
 
 import (
+       "net/http"
+
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/server/rest/controller/v4"
 )
@@ -27,12 +29,12 @@ type MicroServiceService struct {
 
 func (this *MicroServiceService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {rest.HTTPMethodGet, "/registry/v3/existence", 
this.GetExistence},
-               {rest.HTTPMethodGet, "/registry/v3/microservices", 
this.GetServices},
-               {rest.HTTPMethodGet, "/registry/v3/microservices/:serviceId", 
this.GetServiceOne},
-               {rest.HTTPMethodPost, "/registry/v3/microservices", 
this.Register},
-               {rest.HTTPMethodPut, 
"/registry/v3/microservices/:serviceId/properties", this.Update},
-               {rest.HTTPMethodDelete, 
"/registry/v3/microservices/:serviceId", this.Unregister},
-               {rest.HTTPMethodDelete, "/registry/v3/microservices", 
this.UnregisterServices},
+               {http.MethodGet, "/registry/v3/existence", this.GetExistence},
+               {http.MethodGet, "/registry/v3/microservices", 
this.GetServices},
+               {http.MethodGet, "/registry/v3/microservices/:serviceId", 
this.GetServiceOne},
+               {http.MethodPost, "/registry/v3/microservices", this.Register},
+               {http.MethodPut, 
"/registry/v3/microservices/:serviceId/properties", this.Update},
+               {http.MethodDelete, "/registry/v3/microservices/:serviceId", 
this.Unregister},
+               {http.MethodDelete, "/registry/v3/microservices", 
this.UnregisterServices},
        }
 }
diff --git a/server/rest/controller/v3/query_rule_controller.go 
b/server/rest/controller/v3/query_rule_controller.go
index 4501661..9e8a385 100644
--- a/server/rest/controller/v3/query_rule_controller.go
+++ b/server/rest/controller/v3/query_rule_controller.go
@@ -17,6 +17,8 @@
 package v3
 
 import (
+       "net/http"
+
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/server/rest/controller/v4"
 )
@@ -27,9 +29,9 @@ type RuleService struct {
 
 func (this *RuleService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {rest.HTTPMethodPost, 
"/registry/v3/microservices/:serviceId/rules", this.AddRule},
-               {rest.HTTPMethodGet, 
"/registry/v3/microservices/:serviceId/rules", this.GetRules},
-               {rest.HTTPMethodPut, 
"/registry/v3/microservices/:serviceId/rules/:rule_id", this.UpdateRule},
-               {rest.HTTPMethodDelete, 
"/registry/v3/microservices/:serviceId/rules/:rule_id", this.DeleteRule},
+               {http.MethodPost, 
"/registry/v3/microservices/:serviceId/rules", this.AddRule},
+               {http.MethodGet, "/registry/v3/microservices/:serviceId/rules", 
this.GetRules},
+               {http.MethodPut, 
"/registry/v3/microservices/:serviceId/rules/:rule_id", this.UpdateRule},
+               {http.MethodDelete, 
"/registry/v3/microservices/:serviceId/rules/:rule_id", this.DeleteRule},
        }
 }
diff --git a/server/rest/controller/v3/schema_controller.go 
b/server/rest/controller/v3/schema_controller.go
index 5c3f1e0..113a392 100644
--- a/server/rest/controller/v3/schema_controller.go
+++ b/server/rest/controller/v3/schema_controller.go
@@ -17,6 +17,8 @@
 package v3
 
 import (
+       "net/http"
+
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/server/rest/controller/v4"
 )
@@ -27,10 +29,10 @@ type SchemaService struct {
 
 func (this *SchemaService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {rest.HTTPMethodGet, 
"/registry/v3/microservices/:serviceId/schemas/:schemaId", this.GetSchemas},
-               {rest.HTTPMethodPut, 
"/registry/v3/microservices/:serviceId/schemas/:schemaId", this.ModifySchema},
-               {rest.HTTPMethodDelete, 
"/registry/v3/microservices/:serviceId/schemas/:schemaId", this.DeleteSchemas},
-               {rest.HTTPMethodPost, 
"/registry/v3/microservices/:serviceId/schemas", this.ModifySchemas},
-               {rest.HTTPMethodGet, 
"/registry/v3/microservices/:serviceId/schemas", this.GetAllSchemas},
+               {http.MethodGet, 
"/registry/v3/microservices/:serviceId/schemas/:schemaId", this.GetSchemas},
+               {http.MethodPut, 
"/registry/v3/microservices/:serviceId/schemas/:schemaId", this.ModifySchema},
+               {http.MethodDelete, 
"/registry/v3/microservices/:serviceId/schemas/:schemaId", this.DeleteSchemas},
+               {http.MethodPost, 
"/registry/v3/microservices/:serviceId/schemas", this.ModifySchemas},
+               {http.MethodGet, 
"/registry/v3/microservices/:serviceId/schemas", this.GetAllSchemas},
        }
 }
diff --git a/server/rest/controller/v3/tag_controller.go 
b/server/rest/controller/v3/tag_controller.go
index 552b838..de69685 100644
--- a/server/rest/controller/v3/tag_controller.go
+++ b/server/rest/controller/v3/tag_controller.go
@@ -17,6 +17,8 @@
 package v3
 
 import (
+       "net/http"
+
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/server/rest/controller/v4"
 )
@@ -27,9 +29,9 @@ type TagService struct {
 
 func (this *TagService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {rest.HTTPMethodPost, 
"/registry/v3/microservices/:serviceId/tags", this.AddTags},
-               {rest.HTTPMethodPut, 
"/registry/v3/microservices/:serviceId/tags/:key", this.UpdateTag},
-               {rest.HTTPMethodGet, 
"/registry/v3/microservices/:serviceId/tags", this.GetTags},
-               {rest.HTTPMethodDelete, 
"/registry/v3/microservices/:serviceId/tags/:key", this.DeleteTags},
+               {http.MethodPost, "/registry/v3/microservices/:serviceId/tags", 
this.AddTags},
+               {http.MethodPut, 
"/registry/v3/microservices/:serviceId/tags/:key", this.UpdateTag},
+               {http.MethodGet, "/registry/v3/microservices/:serviceId/tags", 
this.GetTags},
+               {http.MethodDelete, 
"/registry/v3/microservices/:serviceId/tags/:key", this.DeleteTags},
        }
 }
diff --git a/server/rest/controller/v4/dependency_controller.go 
b/server/rest/controller/v4/dependency_controller.go
index 169dd16..d41fac8 100644
--- a/server/rest/controller/v4/dependency_controller.go
+++ b/server/rest/controller/v4/dependency_controller.go
@@ -35,10 +35,10 @@ type DependencyService struct {
 
 func (s *DependencyService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodPost, Path: 
"/v4/:project/registry/dependencies", Func: s.AddDependenciesForMicroServices},
-               {Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/dependencies", Func: 
s.CreateDependenciesForMicroServices},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:consumerId/providers", Func: 
s.GetConProDependencies},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:providerId/consumers", Func: 
s.GetProConDependencies},
+               {Method: http.MethodPost, Path: 
"/v4/:project/registry/dependencies", Func: s.AddDependenciesForMicroServices},
+               {Method: http.MethodPut, Path: 
"/v4/:project/registry/dependencies", Func: 
s.CreateDependenciesForMicroServices},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices/:consumerId/providers", Func: 
s.GetConProDependencies},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices/:providerId/consumers", Func: 
s.GetProConDependencies},
        }
 }
 
diff --git a/server/rest/controller/v4/instance_controller.go 
b/server/rest/controller/v4/instance_controller.go
index 92b4b2b..2c46c32 100644
--- a/server/rest/controller/v4/instance_controller.go
+++ b/server/rest/controller/v4/instance_controller.go
@@ -38,16 +38,16 @@ type MicroServiceInstanceService struct {
 
 func (s *MicroServiceInstanceService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/instances", Func: s.FindInstances},
-               {Method: rest.HTTPMethodPost, Path: 
"/v4/:project/registry/instances/action", Func: s.InstancesAction},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/instances", Func: 
s.GetInstances},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId", Func: 
s.GetOneInstance},
-               {Method: rest.HTTPMethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/instances", Func: 
s.RegisterInstance},
-               {Method: rest.HTTPMethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId", Func: 
s.UnregisterInstance},
-               {Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/properties",
 Func: s.UpdateMetadata},
-               {Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/status", 
Func: s.UpdateStatus},
-               {Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/heartbeat",
 Func: s.Heartbeat},
-               {Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/heartbeats", Func: s.HeartbeatSet},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/instances", Func: s.FindInstances},
+               {Method: http.MethodPost, Path: 
"/v4/:project/registry/instances/action", Func: s.InstancesAction},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/instances", Func: 
s.GetInstances},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId", Func: 
s.GetOneInstance},
+               {Method: http.MethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/instances", Func: 
s.RegisterInstance},
+               {Method: http.MethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId", Func: 
s.UnregisterInstance},
+               {Method: http.MethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/properties",
 Func: s.UpdateMetadata},
+               {Method: http.MethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/status", 
Func: s.UpdateStatus},
+               {Method: http.MethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/heartbeat",
 Func: s.Heartbeat},
+               {Method: http.MethodPut, Path: 
"/v4/:project/registry/heartbeats", Func: s.HeartbeatSet},
        }
 }
 func (s *MicroServiceInstanceService) RegisterInstance(w http.ResponseWriter, 
r *http.Request) {
diff --git a/server/rest/controller/v4/instance_watcher.go 
b/server/rest/controller/v4/instance_watcher.go
index c8bf7f1..7e273be 100644
--- a/server/rest/controller/v4/instance_watcher.go
+++ b/server/rest/controller/v4/instance_watcher.go
@@ -23,18 +23,29 @@ import (
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/server/core"
+       "github.com/apache/servicecomb-service-center/server/handler/exception"
        pb "github.com/go-chassis/cari/discovery"
        "github.com/gorilla/websocket"
 )
 
+const (
+       APIWatch     = "/v4/:project/registry/microservices/:serviceId/watcher"
+       APIHeartbeat = 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/heartbeat"
+)
+
+func init() {
+       exception.RegisterWhitelist(http.MethodGet, APIWatch)
+       exception.RegisterWhitelist(http.MethodGet, APIHeartbeat)
+}
+
 type WatchService struct {
        //
 }
 
 func (s *WatchService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/watcher", Func: s.Watch},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/heartbeat",
 Func: s.Heartbeat},
+               {Method: http.MethodGet, Path: APIWatch, Func: s.Watch},
+               {Method: http.MethodGet, Path: APIHeartbeat, Func: s.Heartbeat},
        }
 }
 
diff --git a/server/rest/controller/v4/main_controller.go 
b/server/rest/controller/v4/main_controller.go
index 4070578..0ee1b69 100644
--- a/server/rest/controller/v4/main_controller.go
+++ b/server/rest/controller/v4/main_controller.go
@@ -48,8 +48,8 @@ type MainService struct {
 
 func (s *MainService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/version", Func: s.GetVersion},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/health", Func: s.ClusterHealth},
+               {Method: http.MethodGet, Path: "/v4/:project/registry/version", 
Func: s.GetVersion},
+               {Method: http.MethodGet, Path: "/v4/:project/registry/health", 
Func: s.ClusterHealth},
        }
 }
 
diff --git a/server/rest/controller/v4/microservice_controller.go 
b/server/rest/controller/v4/microservice_controller.go
index 6c7797d..9f6fc31 100644
--- a/server/rest/controller/v4/microservice_controller.go
+++ b/server/rest/controller/v4/microservice_controller.go
@@ -38,13 +38,13 @@ type MicroServiceService struct {
 
 func (s *MicroServiceService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/existence", Func: s.GetExistence},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices", Func: s.GetServices},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId", Func: s.GetServiceOne},
-               {Method: rest.HTTPMethodPost, Path: 
"/v4/:project/registry/microservices", Func: s.Register},
-               {Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/properties", Func: s.Update},
-               {Method: rest.HTTPMethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId", Func: s.Unregister},
-               {Method: rest.HTTPMethodDelete, Path: 
"/v4/:project/registry/microservices", Func: s.UnregisterServices},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/existence", Func: s.GetExistence},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices", Func: s.GetServices},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId", Func: s.GetServiceOne},
+               {Method: http.MethodPost, Path: 
"/v4/:project/registry/microservices", Func: s.Register},
+               {Method: http.MethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/properties", Func: s.Update},
+               {Method: http.MethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId", Func: s.Unregister},
+               {Method: http.MethodDelete, Path: 
"/v4/:project/registry/microservices", Func: s.UnregisterServices},
        }
 }
 
diff --git a/server/rest/controller/v4/query_rule_controller.go 
b/server/rest/controller/v4/query_rule_controller.go
index c35908c..53ebd45 100644
--- a/server/rest/controller/v4/query_rule_controller.go
+++ b/server/rest/controller/v4/query_rule_controller.go
@@ -37,10 +37,10 @@ type RuleService struct {
 
 func (s *RuleService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/rules", Func: s.AddRule},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/rules", Func: s.GetRules},
-               {Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/rules/:rule_id", Func: 
s.UpdateRule},
-               {Method: rest.HTTPMethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/rules/:rule_id", Func: 
s.DeleteRule},
+               {Method: http.MethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/rules", Func: s.AddRule},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/rules", Func: s.GetRules},
+               {Method: http.MethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/rules/:rule_id", Func: 
s.UpdateRule},
+               {Method: http.MethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/rules/:rule_id", Func: 
s.DeleteRule},
        }
 }
 func (s *RuleService) AddRule(w http.ResponseWriter, r *http.Request) {
diff --git a/server/rest/controller/v4/schema_controller.go 
b/server/rest/controller/v4/schema_controller.go
index 802ed84..b02e391 100644
--- a/server/rest/controller/v4/schema_controller.go
+++ b/server/rest/controller/v4/schema_controller.go
@@ -41,16 +41,16 @@ type SchemaService struct {
 
 func (s *SchemaService) URLPatterns() []rest.Route {
        var r = []rest.Route{
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas/:schemaId", Func: 
s.GetSchemas},
-               {Method: rest.HTTPMethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas/:schemaId", Func: 
s.DeleteSchemas},
-               {Method: rest.HTTPMethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas", Func: 
s.ModifySchemas},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas", Func: 
s.GetAllSchemas},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas/:schemaId", Func: 
s.GetSchemas},
+               {Method: http.MethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas/:schemaId", Func: 
s.DeleteSchemas},
+               {Method: http.MethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas", Func: 
s.ModifySchemas},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas", Func: 
s.GetAllSchemas},
        }
 
        if !config.GetRegistry().SchemaDisable {
-               r = append(r, rest.Route{Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas/:schemaId", Func: 
s.ModifySchema})
+               r = append(r, rest.Route{Method: http.MethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas/:schemaId", Func: 
s.ModifySchema})
        } else {
-               r = append(r, rest.Route{Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas/:schemaId", Func: 
s.DisableSchema})
+               r = append(r, rest.Route{Method: http.MethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/schemas/:schemaId", Func: 
s.DisableSchema})
        }
 
        return r
diff --git a/server/rest/controller/v4/tag_controller.go 
b/server/rest/controller/v4/tag_controller.go
index bcf1644..964bdf4 100644
--- a/server/rest/controller/v4/tag_controller.go
+++ b/server/rest/controller/v4/tag_controller.go
@@ -37,10 +37,10 @@ type TagService struct {
 
 func (s *TagService) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/tags", Func: s.AddTags},
-               {Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/tags/:key", Func: s.UpdateTag},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/tags", Func: s.GetTags},
-               {Method: rest.HTTPMethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/tags/:key", Func: s.DeleteTags},
+               {Method: http.MethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/tags", Func: s.AddTags},
+               {Method: http.MethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/tags/:key", Func: s.UpdateTag},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/microservices/:serviceId/tags", Func: s.GetTags},
+               {Method: http.MethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/tags/:key", Func: s.DeleteTags},
        }
 }
 
diff --git a/server/rest/govern/controller_v3.go 
b/server/rest/govern/controller_v3.go
index 8df81af..20c2a38 100644
--- a/server/rest/govern/controller_v3.go
+++ b/server/rest/govern/controller_v3.go
@@ -18,6 +18,8 @@
 package govern
 
 import (
+       "net/http"
+
        "github.com/apache/servicecomb-service-center/pkg/rest"
 )
 
@@ -29,8 +31,8 @@ type ResourceV3 struct {
 // URLPatterns 路由
 func (governService *ResourceV3) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodGet, Path: 
"/registry/v3/govern/service/:serviceId", Func: governService.GetServiceDetail},
-               {Method: rest.HTTPMethodGet, Path: 
"/registry/v3/govern/relation", Func: governService.GetGraph},
-               {Method: rest.HTTPMethodGet, Path: 
"/registry/v3/govern/services", Func: governService.GetAllServicesInfo},
+               {Method: http.MethodGet, Path: 
"/registry/v3/govern/service/:serviceId", Func: governService.GetServiceDetail},
+               {Method: http.MethodGet, Path: "/registry/v3/govern/relation", 
Func: governService.GetGraph},
+               {Method: http.MethodGet, Path: "/registry/v3/govern/services", 
Func: governService.GetAllServicesInfo},
        }
 }
diff --git a/server/rest/govern/controller_v4.go 
b/server/rest/govern/controller_v4.go
index c28673f..0532d7d 100644
--- a/server/rest/govern/controller_v4.go
+++ b/server/rest/govern/controller_v4.go
@@ -38,11 +38,11 @@ type ResourceV4 struct {
 // URLPatterns 路由
 func (governService *ResourceV4) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/govern/microservices/:serviceId", Func: 
governService.GetServiceDetail},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/govern/relations", Func: governService.GetGraph},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/govern/microservices", Func: governService.GetAllServicesInfo},
-               {Method: rest.HTTPMethodGet, Path: "/v4/:project/govern/apps", 
Func: governService.GetAllApplications},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/govern/statistics", Func: governService.GetAllServicesStatistics},
+               {Method: http.MethodGet, Path: 
"/v4/:project/govern/microservices/:serviceId", Func: 
governService.GetServiceDetail},
+               {Method: http.MethodGet, Path: "/v4/:project/govern/relations", 
Func: governService.GetGraph},
+               {Method: http.MethodGet, Path: 
"/v4/:project/govern/microservices", Func: governService.GetAllServicesInfo},
+               {Method: http.MethodGet, Path: "/v4/:project/govern/apps", 
Func: governService.GetAllApplications},
+               {Method: http.MethodGet, Path: 
"/v4/:project/govern/statistics", Func: governService.GetAllServicesStatistics},
        }
 }
 
diff --git a/syncer/pkg/mock/mockservicecenter/servicecenter.go 
b/syncer/pkg/mock/mockservicecenter/servicecenter.go
index 6274018..212010a 100644
--- a/syncer/pkg/mock/mockservicecenter/servicecenter.go
+++ b/syncer/pkg/mock/mockservicecenter/servicecenter.go
@@ -44,14 +44,14 @@ type mockServer struct{}
 
 func (m *mockServer) URLPatterns() []rest.Route {
        return []rest.Route{
-               {Method: rest.HTTPMethodGet, Path: "/v4/:project/admin/dump", 
Func: m.GetAll},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/existence", Func: m.ServiceExistence},
-               {Method: rest.HTTPMethodPost, Path: 
"/v4/:project/registry/microservices", Func: m.CreateService},
-               {Method: rest.HTTPMethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId", Func: m.DeleteService},
-               {Method: rest.HTTPMethodGet, Path: 
"/v4/:project/registry/instances", Func: m.DiscoveryInstances},
-               {Method: rest.HTTPMethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/instances", Func: 
m.RegisterInstance},
-               {Method: rest.HTTPMethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId", Func: 
m.UnregisterInstance},
-               {Method: rest.HTTPMethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/heartbeat",
 Func: m.Heartbeat},
+               {Method: http.MethodGet, Path: "/v4/:project/admin/dump", Func: 
m.GetAll},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/existence", Func: m.ServiceExistence},
+               {Method: http.MethodPost, Path: 
"/v4/:project/registry/microservices", Func: m.CreateService},
+               {Method: http.MethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId", Func: m.DeleteService},
+               {Method: http.MethodGet, Path: 
"/v4/:project/registry/instances", Func: m.DiscoveryInstances},
+               {Method: http.MethodPost, Path: 
"/v4/:project/registry/microservices/:serviceId/instances", Func: 
m.RegisterInstance},
+               {Method: http.MethodDelete, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId", Func: 
m.UnregisterInstance},
+               {Method: http.MethodPut, Path: 
"/v4/:project/registry/microservices/:serviceId/instances/:instanceId/heartbeat",
 Func: m.Heartbeat},
        }
 }
 

Reply via email to