diff --git a/protocol/rest/rest_config_initializer.go b/protocol/rest/rest_config_initializer.go
index f25f611b93a1127e0c7ed4a8ded37105d6ee4363..13a463b049bccbf020432a906501801ebaf06950 100644
--- a/protocol/rest/rest_config_initializer.go
+++ b/protocol/rest/rest_config_initializer.go
@@ -32,10 +32,8 @@ import (
 )
 
 var (
-	restConsumerConfig           *rest_interface.RestConsumerConfig
-	restProviderConfig           *rest_interface.RestProviderConfig
-	restConsumerServiceConfigMap map[string]*rest_interface.RestConfig
-	restProviderServiceConfigMap map[string]*rest_interface.RestConfig
+	restConsumerServiceConfigMap map[string]*rest_interface.RestServiceConfig
+	restProviderServiceConfigMap map[string]*rest_interface.RestServiceConfig
 )
 
 func init() {
@@ -46,12 +44,12 @@ func init() {
 func initConsumerRestConfig() {
 	consumerConfigType := config.GetConsumerConfig().RestConfigType
 	consumerConfigReader := extension.GetSingletonRestConfigReader(consumerConfigType)
-	restConsumerConfig = consumerConfigReader.ReadConsumerConfig()
+	restConsumerConfig := consumerConfigReader.ReadConsumerConfig()
 	if restConsumerConfig == nil {
 		return
 	}
-	restConsumerServiceConfigMap = make(map[string]*rest_interface.RestConfig, len(restConsumerConfig.RestConfigMap))
-	for key, rc := range restConsumerConfig.RestConfigMap {
+	restConsumerServiceConfigMap = make(map[string]*rest_interface.RestServiceConfig, len(restConsumerConfig.RestServiceConfigsMap))
+	for key, rc := range restConsumerConfig.RestServiceConfigsMap {
 		rc.Client = getNotEmptyStr(rc.Client, restConsumerConfig.Client, constant.DEFAULT_REST_CLIENT)
 		rc.RestMethodConfigsMap = initMethodConfigMap(rc, restConsumerConfig.Consumes, restConsumerConfig.Produces)
 		restConsumerServiceConfigMap[strings.TrimPrefix(key, "/")] = rc
@@ -61,19 +59,19 @@ func initConsumerRestConfig() {
 func initProviderRestConfig() {
 	providerConfigType := config.GetProviderConfig().RestConfigType
 	providerConfigReader := extension.GetSingletonRestConfigReader(providerConfigType)
-	restProviderConfig = providerConfigReader.ReadProviderConfig()
+	restProviderConfig := providerConfigReader.ReadProviderConfig()
 	if restProviderConfig == nil {
 		return
 	}
-	restProviderServiceConfigMap = make(map[string]*rest_interface.RestConfig, len(restProviderConfig.RestConfigMap))
-	for key, rc := range restProviderConfig.RestConfigMap {
+	restProviderServiceConfigMap = make(map[string]*rest_interface.RestServiceConfig, len(restProviderConfig.RestServiceConfigsMap))
+	for key, rc := range restProviderConfig.RestServiceConfigsMap {
 		rc.Server = getNotEmptyStr(rc.Server, restProviderConfig.Server, constant.DEFAULT_REST_SERVER)
 		rc.RestMethodConfigsMap = initMethodConfigMap(rc, restProviderConfig.Consumes, restProviderConfig.Produces)
 		restProviderServiceConfigMap[strings.TrimPrefix(key, "/")] = rc
 	}
 }
 
-func initMethodConfigMap(rc *rest_interface.RestConfig, consumes string, produces string) map[string]*rest_interface.RestMethodConfig {
+func initMethodConfigMap(rc *rest_interface.RestServiceConfig, consumes string, produces string) map[string]*rest_interface.RestMethodConfig {
 	mcm := make(map[string]*rest_interface.RestMethodConfig, len(rc.RestMethodConfigs))
 	for _, mc := range rc.RestMethodConfigs {
 		mc.InterfaceName = rc.InterfaceName
@@ -139,18 +137,18 @@ func parseParamsString2Map(params string) (map[int]string, error) {
 	return m, nil
 }
 
-func GetRestConsumerServiceConfig(path string) *rest_interface.RestConfig {
+func GetRestConsumerServiceConfig(path string) *rest_interface.RestServiceConfig {
 	return restConsumerServiceConfigMap[path]
 }
 
-func GetRestProviderServiceConfig(path string) *rest_interface.RestConfig {
+func GetRestProviderServiceConfig(path string) *rest_interface.RestServiceConfig {
 	return restProviderServiceConfigMap[path]
 }
 
-func SetRestConsumerServiceConfigMap(configMap map[string]*rest_interface.RestConfig) {
+func SetRestConsumerServiceConfigMap(configMap map[string]*rest_interface.RestServiceConfig) {
 	restConsumerServiceConfigMap = configMap
 }
 
-func SetRestProviderServiceConfigMap(configMap map[string]*rest_interface.RestConfig) {
+func SetRestProviderServiceConfigMap(configMap map[string]*rest_interface.RestServiceConfig) {
 	restProviderServiceConfigMap = configMap
 }
diff --git a/protocol/rest/rest_config_initializer_test.go b/protocol/rest/rest_config_initializer_test.go
index fd5d813a1879e8e248e6644c665f42bdae9a1342..5def4d4df04db15a20c03e5b6ff68b9c26efa412 100644
--- a/protocol/rest/rest_config_initializer_test.go
+++ b/protocol/rest/rest_config_initializer_test.go
@@ -36,6 +36,15 @@ func TestGetRestConsumerServiceConfig(t *testing.T) {
 	initConsumerRestConfig()
 	serviceConfig := GetRestConsumerServiceConfig("UserProvider")
 	assert.NotEmpty(t, serviceConfig)
+	assert.NotEmpty(t, serviceConfig.RestMethodConfigsMap)
+	assert.NotEmpty(t, serviceConfig.RestMethodConfigsMap["GetUser"])
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].QueryParamsMap[1], "userid")
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].HeadersMap[3], "age")
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].PathParamsMap[4], "time")
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].Body, 0)
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].Produces, "application/xml")
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].Consumes, "application/xml")
+	assert.Equal(t, serviceConfig.Client, "resty1")
 }
 
 func TestGetRestProviderServiceConfig(t *testing.T) {
@@ -44,4 +53,14 @@ func TestGetRestProviderServiceConfig(t *testing.T) {
 	initProviderRestConfig()
 	serviceConfig := GetRestProviderServiceConfig("UserProvider")
 	assert.NotEmpty(t, serviceConfig)
+	assert.NotEmpty(t, serviceConfig.RestMethodConfigsMap)
+	assert.NotEmpty(t, serviceConfig.RestMethodConfigsMap["GetUser"])
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].QueryParamsMap[1], "userid")
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].HeadersMap[3], "age")
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].PathParamsMap[4], "time")
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].Body, 0)
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].Produces, "application/xml")
+	assert.Equal(t, serviceConfig.RestMethodConfigsMap["GetUser"].Consumes, "application/xml")
+	assert.Equal(t, serviceConfig.Server, "go-restful1")
+
 }
diff --git a/protocol/rest/rest_config_reader/testdata/consumer_config.yml b/protocol/rest/rest_config_reader/testdata/consumer_config.yml
index c484a2bafd3d2850f23195111adb6263e30d9841..4cbb86fd5416817f304fcb9cadfde1989ecda908 100644
--- a/protocol/rest/rest_config_reader/testdata/consumer_config.yml
+++ b/protocol/rest/rest_config_reader/testdata/consumer_config.yml
@@ -7,6 +7,10 @@ request_timeout : "100ms"
 # connect timeout
 connect_timeout : "100ms"
 check: true
+rest_server: "resty"
+rest_produces: "*/*"
+rest_consumes: "*/*"
+
 # application config
 application:
   organization : "ikurento.com"
@@ -35,20 +39,27 @@ references:
   "UserProvider":
     registry: "hangzhouzk,shanghaizk"
     filter: ""
-    protocol : "dubbo"
+    protocol : "rest"
     version: "1.0"
     group: "as"
     interface : "com.ikurento.user.UserProvider"
     url: "dubbo://127.0.0.1:20000/UserProvider"
     cluster: "failover"
     timeout: "3s"
+    rest_client: "resty1"
+    rest_produces: "application/xml"
+    rest_consumes: "application/xml"
     methods :
       - name: "GetUser"
         retries: "3"
         timeout: "5s"
         rest_query_params: "1:userid,2:username"
-        rest_headrs: "3:age"
+        rest_headers: "3:age"
         rest_path_params: "4:time,2:name"
+        rest_body: 0
+        rest_produces: "application/xml"
+        rest_consumes: "application/xml"
+
     params:
       "serviceid":
         "soa.com.ikurento.user.UserProvider"
@@ -58,43 +69,3 @@ shutdown_conf:
   timeout: 60s
   step_timeout: 10s
 
-protocol_conf:
-  # when you choose the Dubbo protocol, the following configuration takes effect
-  dubbo:
-    reconnect_interval: 0
-    # reconnect_interval is the actual number of connections a session can use
-    connection_number: 2
-    # heartbeat_period is heartbeat interval between server and client connection.
-    # Effective by client configuration
-    heartbeat_period: "30s"
-    # when the session is inactive for more than session_timeout, the session may be closed
-    session_timeout: "30s"
-    # a reference has the size of the session connection pool
-    # that is the maximum number of sessions it may have
-    pool_size: 4
-    # dubbo-go uses getty as the network connection library.
-    # The following is the relevant configuration of getty
-    pool_ttl: 600
-    # gr_pool_size is recommended to be set to [cpu core number] * 100
-    gr_pool_size: 1200
-    # queue_len is recommended to be set to 64 or 128
-    queue_len: 64
-    # queue_number is recommended to be set to gr_pool_size / 20
-    queue_number: 60
-    # dubbo-go uses getty as the network connection library.
-    # The following is the relevant configuration of getty
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      # maximum len of data per request
-      # this refers to the total amount of data requested or returned
-      max_msg_len: 102400
-      session_name: "client"
diff --git a/protocol/rest/rest_config_reader/testdata/provider_config.yml b/protocol/rest/rest_config_reader/testdata/provider_config.yml
index 76c09cb1b8d91ff50ac37f553ef4486795b057cf..7ca544491af11b7253917bea43352474629e20f4 100644
--- a/protocol/rest/rest_config_reader/testdata/provider_config.yml
+++ b/protocol/rest/rest_config_reader/testdata/provider_config.yml
@@ -24,6 +24,9 @@ registries :
     username: ""
     password: ""
 
+rest_server: "go-restful"
+rest_produces: "*/*"
+rest_consumes: "*/*"
 
 services:
   "UserProvider":
@@ -43,7 +46,7 @@ services:
     execute.limit: "200"
     # the name of RejectedExecutionHandler
     execute.limit.rejected.handler: "default"
-    protocol : "dubbo"
+    protocol : "rest"
     # equivalent to interface of dubbo.xml
     interface : "com.ikurento.user.UserProvider"
     loadbalance: "random"
@@ -51,6 +54,9 @@ services:
     group: "as"
     warmup: "100"
     cluster: "failover"
+    rest_server: "go-restful1"
+    rest_produces: "*/*"
+    rest_consumes: "*/*"
     methods:
       - name: "GetUser"
         retries: 1
@@ -60,41 +66,19 @@ services:
         execute.limit: "200"
         # the name of RejectedExecutionHandler
         execute.limit.rejected.handler: "default"
+        rest_query_params: "1:userid,2:username"
+        rest_headers: "3:age"
+        rest_path_params: "4:time,2:name"
+        rest_body: 0
+        rest_produces: "application/xml"
+        rest_consumes: "application/xml"
 
 protocols:
-    "dubbo":
-      name: "dubbo"
-      # while using dubbo protocol, ip cannot is 127.0.0.1, because client of java-dubbo will get 'connection refuse'
+    "rest":
+      name: "rest"
       ip : "127.0.0.1"
       port : 20000
-  #-   name: "jsonrpc"
-  #    ip: "127.0.0.1"
-  #    port: 20001
 
-shutdown_conf:
-  timeout: 60s
-  step_timeout: 10s
 
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "20s"
-    # gr_pool_size is recommended to be set to [cpu core number] * 10
-    gr_pool_size: 120
-    # queue_len is recommended to be set to 64 or 128
-    queue_len: 64
-    # queue_number is recommended to be set to gr_pool_size / 20
-    queue_number: 6
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024
-      session_name: "server"
+
+
diff --git a/protocol/rest/rest_interface/rest_config.go b/protocol/rest/rest_interface/rest_config.go
index e1d7928cece39244bffe6029979d4c032ff939be..a7715cd091f4349b235ce1b35687befe0a8b5cf5 100644
--- a/protocol/rest/rest_interface/rest_config.go
+++ b/protocol/rest/rest_interface/rest_config.go
@@ -20,10 +20,10 @@ package rest_interface
 import "github.com/creasty/defaults"
 
 type RestConsumerConfig struct {
-	Client        string                 `default:"resty" yaml:"rest_client" json:"rest_client,omitempty" property:"rest_client"`
-	Produces      string                 `default:"application/json" yaml:"rest_produces"  json:"rest_produces,omitempty" property:"rest_produces"`
-	Consumes      string                 `default:"application/json" yaml:"rest_consumes"  json:"rest_consumes,omitempty" property:"rest_consumes"`
-	RestConfigMap map[string]*RestConfig `yaml:"references" json:"references,omitempty" property:"references"`
+	Client                string                        `default:"resty" yaml:"rest_client" json:"rest_client,omitempty" property:"rest_client"`
+	Produces              string                        `default:"application/json" yaml:"rest_produces"  json:"rest_produces,omitempty" property:"rest_produces"`
+	Consumes              string                        `default:"application/json" yaml:"rest_consumes"  json:"rest_consumes,omitempty" property:"rest_consumes"`
+	RestServiceConfigsMap map[string]*RestServiceConfig `yaml:"references" json:"references,omitempty" property:"references"`
 }
 
 // UnmarshalYAML ...
@@ -39,10 +39,10 @@ func (c *RestConsumerConfig) UnmarshalYAML(unmarshal func(interface{}) error) er
 }
 
 type RestProviderConfig struct {
-	Server        string                 `default:"go-restful" yaml:"rest_server" json:"rest_server,omitempty" property:"rest_server"`
-	Produces      string                 `default:"*/*" yaml:"rest_produces"  json:"rest_produces,omitempty" property:"rest_produces"`
-	Consumes      string                 `default:"*/*" yaml:"rest_consumes"  json:"rest_consumes,omitempty" property:"rest_consumes"`
-	RestConfigMap map[string]*RestConfig `yaml:"services" json:"services,omitempty" property:"services"`
+	Server                string                        `default:"go-restful" yaml:"rest_server" json:"rest_server,omitempty" property:"rest_server"`
+	Produces              string                        `default:"*/*" yaml:"rest_produces"  json:"rest_produces,omitempty" property:"rest_produces"`
+	Consumes              string                        `default:"*/*" yaml:"rest_consumes"  json:"rest_consumes,omitempty" property:"rest_consumes"`
+	RestServiceConfigsMap map[string]*RestServiceConfig `yaml:"services" json:"services,omitempty" property:"services"`
 }
 
 // UnmarshalYAML ...
@@ -57,7 +57,7 @@ func (c *RestProviderConfig) UnmarshalYAML(unmarshal func(interface{}) error) er
 	return nil
 }
 
-type RestConfig struct {
+type RestServiceConfig struct {
 	InterfaceName        string              `required:"true"  yaml:"interface"  json:"interface,omitempty" property:"interface"`
 	Url                  string              `yaml:"url"  json:"url,omitempty" property:"url"`
 	Path                 string              `yaml:"rest_path"  json:"rest_path,omitempty" property:"rest_path"`
@@ -71,11 +71,11 @@ type RestConfig struct {
 }
 
 // UnmarshalYAML ...
-func (c *RestConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
+func (c *RestServiceConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
 	if err := defaults.Set(c); err != nil {
 		return err
 	}
-	type plain RestConfig
+	type plain RestServiceConfig
 	if err := unmarshal((*plain)(c)); err != nil {
 		return err
 	}
diff --git a/protocol/rest/rest_invoker_test.go b/protocol/rest/rest_invoker_test.go
index 2ec71b775da03edbbd6004d42f4f097dd69519f9..d6419a309e09e25fbb775ecacaebaedaf468a1b5 100644
--- a/protocol/rest/rest_invoker_test.go
+++ b/protocol/rest/rest_invoker_test.go
@@ -51,7 +51,7 @@ func TestRestInvoker_Invoke(t *testing.T) {
 	assert.NoError(t, err)
 	con := config.ProviderConfig{}
 	config.SetProviderConfig(con)
-	configMap := make(map[string]*rest_interface.RestConfig)
+	configMap := make(map[string]*rest_interface.RestServiceConfig)
 	methodConfigMap := make(map[string]*rest_interface.RestMethodConfig)
 	queryParamsMap := make(map[int]string)
 	queryParamsMap[1] = "age"
@@ -135,7 +135,7 @@ func TestRestInvoker_Invoke(t *testing.T) {
 		HeadersMap:     headersMap,
 	}
 
-	configMap["com.ikurento.user.UserProvider"] = &rest_interface.RestConfig{
+	configMap["com.ikurento.user.UserProvider"] = &rest_interface.RestServiceConfig{
 		Server:               "go-restful",
 		RestMethodConfigsMap: methodConfigMap,
 	}
@@ -143,8 +143,8 @@ func TestRestInvoker_Invoke(t *testing.T) {
 	proxyFactory := extension.GetProxyFactory("default")
 	proto.Export(proxyFactory.GetInvoker(url))
 	time.Sleep(5 * time.Second)
-	configMap = make(map[string]*rest_interface.RestConfig)
-	configMap["com.ikurento.user.UserProvider"] = &rest_interface.RestConfig{
+	configMap = make(map[string]*rest_interface.RestServiceConfig)
+	configMap["com.ikurento.user.UserProvider"] = &rest_interface.RestServiceConfig{
 		RestMethodConfigsMap: methodConfigMap,
 	}
 	restClient := rest_client.GetRestyClient(&rest_interface.RestOptions{ConnectTimeout: 3 * time.Second, RequestTimeout: 3 * time.Second})
@@ -165,24 +165,28 @@ func TestRestInvoker_Invoke(t *testing.T) {
 	assert.Equal(t, now.Unix(), res.Result().(*User).Time.Unix())
 	assert.Equal(t, int32(23), res.Result().(*User).Age)
 	assert.Equal(t, "username", res.Result().(*User).Name)
+	// test 1
 	inv = invocation.NewRPCInvocationWithOptions(invocation.WithMethodName("GetUserTwo"),
 		invocation.WithArguments([]interface{}{&User{1, &now, int32(23), "username"}}), invocation.WithReply(user))
 	res = invoker.Invoke(context.Background(), inv)
 	assert.NoError(t, res.Error())
 	assert.NotNil(t, res.Result())
 	assert.Equal(t, "username", res.Result().(*User).Name)
+	// test 2
 	inv = invocation.NewRPCInvocationWithOptions(invocation.WithMethodName("GetUserThree"),
 		invocation.WithArguments([]interface{}{&User{1, &now, int32(23), "username"}}), invocation.WithReply(user))
 	res = invoker.Invoke(context.Background(), inv)
 	assert.NoError(t, res.Error())
 	assert.NotNil(t, res.Result())
 	assert.Equal(t, "username", res.Result().(*User).Name)
+	// test 3
 	inv = invocation.NewRPCInvocationWithOptions(invocation.WithMethodName("GetUserFour"),
 		invocation.WithArguments([]interface{}{[]User{User{1, nil, int32(23), "username"}}}), invocation.WithReply(user))
 	res = invoker.Invoke(context.Background(), inv)
 	assert.NoError(t, res.Error())
 	assert.NotNil(t, res.Result())
 	assert.Equal(t, "username", res.Result().(*User).Name)
+	// test 4
 	inv = invocation.NewRPCInvocationWithOptions(invocation.WithMethodName("GetUserFive"), invocation.WithReply(user))
 	res = invoker.Invoke(context.Background(), inv)
 	assert.Error(t, res.Error(), "test error")
diff --git a/protocol/rest/rest_protocol.go b/protocol/rest/rest_protocol.go
index 2b4ecba896e9c0c4b15fb973446adbf9a7fd74e8..fdf941a0d50cbadb0a685c055fed6cc8242c6a3a 100644
--- a/protocol/rest/rest_protocol.go
+++ b/protocol/rest/rest_protocol.go
@@ -27,6 +27,7 @@ import (
 	"github.com/apache/dubbo-go/common"
 	"github.com/apache/dubbo-go/common/constant"
 	"github.com/apache/dubbo-go/common/extension"
+	"github.com/apache/dubbo-go/common/logger"
 	"github.com/apache/dubbo-go/config"
 	"github.com/apache/dubbo-go/protocol"
 	"github.com/apache/dubbo-go/protocol/rest/rest_interface"
@@ -63,10 +64,14 @@ func (rp *RestProtocol) Export(invoker protocol.Invoker) protocol.Exporter {
 	url := invoker.GetUrl()
 	serviceKey := url.ServiceKey()
 	exporter := NewRestExporter(serviceKey, invoker, rp.ExporterMap())
-	restConfig := GetRestProviderServiceConfig(strings.TrimPrefix(url.Path, "/"))
+	restServiceConfig := GetRestProviderServiceConfig(strings.TrimPrefix(url.Path, "/"))
+	if restServiceConfig == nil {
+		logger.Errorf("%s service doesn't has provider config", url.Path)
+		return nil
+	}
 	rp.SetExporterMap(serviceKey, exporter)
-	restServer := rp.getServer(url, restConfig)
-	restServer.Deploy(invoker, restConfig.RestMethodConfigsMap)
+	restServer := rp.getServer(url, restServiceConfig.Server)
+	restServer.Deploy(invoker, restServiceConfig.RestMethodConfigsMap)
 	return exporter
 }
 
@@ -78,15 +83,19 @@ func (rp *RestProtocol) Refer(url common.URL) protocol.Invoker {
 	if t, err := time.ParseDuration(requestTimeoutStr); err == nil {
 		requestTimeout = t
 	}
-	restConfig := GetRestConsumerServiceConfig(strings.TrimPrefix(url.Path, "/"))
+	restServiceConfig := GetRestConsumerServiceConfig(strings.TrimPrefix(url.Path, "/"))
+	if restServiceConfig == nil {
+		logger.Errorf("%s service doesn't has consumer config", url.Path)
+		return nil
+	}
 	restOptions := rest_interface.RestOptions{RequestTimeout: requestTimeout, ConnectTimeout: connectTimeout}
-	restClient := rp.getClient(restOptions, restConfig)
-	invoker := NewRestInvoker(url, &restClient, restConfig.RestMethodConfigsMap)
+	restClient := rp.getClient(restOptions, restServiceConfig.Client)
+	invoker := NewRestInvoker(url, &restClient, restServiceConfig.RestMethodConfigsMap)
 	rp.SetInvokers(invoker)
 	return invoker
 }
 
-func (rp *RestProtocol) getServer(url common.URL, restConfig *rest_interface.RestConfig) rest_interface.RestServer {
+func (rp *RestProtocol) getServer(url common.URL, serverType string) rest_interface.RestServer {
 	restServer, ok := rp.serverMap[url.Location]
 	if !ok {
 		_, ok := rp.ExporterMap().Load(url.ServiceKey())
@@ -96,7 +105,7 @@ func (rp *RestProtocol) getServer(url common.URL, restConfig *rest_interface.Res
 		rp.serverLock.Lock()
 		restServer, ok = rp.serverMap[url.Location]
 		if !ok {
-			restServer = extension.GetNewRestServer(restConfig.Server)
+			restServer = extension.GetNewRestServer(serverType)
 			restServer.Start(url)
 			rp.serverMap[url.Location] = restServer
 		}
@@ -106,13 +115,13 @@ func (rp *RestProtocol) getServer(url common.URL, restConfig *rest_interface.Res
 	return restServer
 }
 
-func (rp *RestProtocol) getClient(restOptions rest_interface.RestOptions, restConfig *rest_interface.RestConfig) rest_interface.RestClient {
+func (rp *RestProtocol) getClient(restOptions rest_interface.RestOptions, clientType string) rest_interface.RestClient {
 	restClient, ok := rp.clientMap[restOptions]
 	rp.clientLock.Lock()
 	if !ok {
 		restClient, ok = rp.clientMap[restOptions]
 		if !ok {
-			restClient = extension.GetNewRestClient(restConfig.Client, &restOptions)
+			restClient = extension.GetNewRestClient(clientType, &restOptions)
 			rp.clientMap[restOptions] = restClient
 		}
 	}
diff --git a/protocol/rest/rest_protocol_test.go b/protocol/rest/rest_protocol_test.go
index 28250d092a3028869317aff678020fc69f36bb11..8dde59c4e651a82a62c07d21c59641d494dee277 100644
--- a/protocol/rest/rest_protocol_test.go
+++ b/protocol/rest/rest_protocol_test.go
@@ -52,8 +52,8 @@ func TestRestProtocol_Refer(t *testing.T) {
 		RequestTimeout: 5 * time.Second,
 	}
 	config.SetConsumerConfig(con)
-	configMap := make(map[string]*rest_interface.RestConfig)
-	configMap["com.ikurento.user.UserProvider"] = &rest_interface.RestConfig{
+	configMap := make(map[string]*rest_interface.RestServiceConfig)
+	configMap["com.ikurento.user.UserProvider"] = &rest_interface.RestServiceConfig{
 		Client: "resty",
 	}
 	SetRestConsumerServiceConfigMap(configMap)
@@ -84,7 +84,7 @@ func TestRestProtocol_Export(t *testing.T) {
 	assert.NoError(t, err)
 	con := config.ProviderConfig{}
 	config.SetProviderConfig(con)
-	configMap := make(map[string]*rest_interface.RestConfig)
+	configMap := make(map[string]*rest_interface.RestServiceConfig)
 	methodConfigMap := make(map[string]*rest_interface.RestMethodConfig)
 	queryParamsMap := make(map[int]string)
 	queryParamsMap[1] = "age"
@@ -104,7 +104,7 @@ func TestRestProtocol_Export(t *testing.T) {
 		QueryParamsMap: queryParamsMap,
 		Body:           -1,
 	}
-	configMap["com.ikurento.user.UserProvider"] = &rest_interface.RestConfig{
+	configMap["com.ikurento.user.UserProvider"] = &rest_interface.RestServiceConfig{
 		Server:               "go-restful",
 		RestMethodConfigsMap: methodConfigMap,
 	}