Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rest protocol #352

Merged
merged 85 commits into from
Mar 15, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
64b9439
init rest protocol
Patrick0308 Jan 11, 2020
5cbba12
rest configs and invoker
Patrick0308 Jan 19, 2020
2d3a6f7
fix
Patrick0308 Jan 21, 2020
69020c0
fixed
Patrick0308 Jan 21, 2020
b3fabce
Merge branch 'develop' into rest_protocol
Patrick0308 Jan 21, 2020
547372f
init rest exporter and modify rest invoker
Patrick0308 Jan 22, 2020
5120254
header params
Patrick0308 Jan 24, 2020
d5fccd6
resty add header params
Patrick0308 Jan 24, 2020
c31030f
fix
Patrick0308 Jan 24, 2020
cbc59d3
go restful server and some unit tests
Patrick0308 Jan 31, 2020
f1908a0
modify
Patrick0308 Jan 31, 2020
567acb1
modify test
Patrick0308 Jan 31, 2020
e899345
Merge pull request #347 from apache/develop
flycash Feb 2, 2020
9acc7aa
Merge branch 'develop' into rest_protocol
Patrick0308 Feb 3, 2020
6a6717f
Merge branch 'feature/rest' into rest_protocol
Patrick0308 Feb 3, 2020
f48a644
fix
Patrick0308 Feb 3, 2020
eb1d850
fix tests
Patrick0308 Feb 3, 2020
756f87f
use "default" constant and remove default timeout options
Patrick0308 Feb 3, 2020
88300f4
add licenses
Patrick0308 Feb 3, 2020
d9c61c4
fmt imports
Patrick0308 Feb 3, 2020
9538a34
fix config initializer
Patrick0308 Feb 4, 2020
f51ae5d
add some unit tests
Patrick0308 Feb 4, 2020
8d1dc02
add testdata about rest config file
Patrick0308 Feb 4, 2020
a957054
add licenses
Patrick0308 Feb 4, 2020
d93a2a3
Merge pull request #329 from Patrick0308/rest_protocol
flycash Feb 5, 2020
114fe40
change service key to path key
Patrick0308 Feb 6, 2020
01361a6
fix serviceKey
Patrick0308 Feb 6, 2020
8b884cc
support req[]
Patrick0308 Feb 6, 2020
fd0a076
fix when args is req[]
Patrick0308 Feb 7, 2020
b67b76a
fix path bug
Patrick0308 Feb 7, 2020
b692796
modify server default consumes and produces
Patrick0308 Feb 8, 2020
bc64aed
Merge pull request #353 from Patrick0308/rest_protocol
flycash Feb 19, 2020
5f90f48
Merge develop
Feb 22, 2020
fd61cc2
Fix review and test
Feb 22, 2020
cd58dfa
Fix review and test
Feb 22, 2020
5af6942
Fix review and test
Feb 22, 2020
eb22fbd
Fix review and test
Feb 22, 2020
b8ac514
Merge pull request #368 from flycash/rest
AlexStocks Feb 22, 2020
a9c5f8f
split import
Patrick0308 Feb 23, 2020
5b76b7c
split import
Patrick0308 Feb 23, 2020
c8a5d15
Merge branch 'rest_protocol' of https://github.com/Patrick0308/dubbo-…
Patrick0308 Feb 23, 2020
4738480
Merge pull request #370 from Patrick0308/rest_protocol
AlexStocks Feb 23, 2020
4e6aa04
add licenses
Patrick0308 Mar 3, 2020
3b46dce
split import
Patrick0308 Mar 3, 2020
5add5e2
remove x/tools
Patrick0308 Mar 3, 2020
4b01d83
Merge pull request #387 from Patrick0308/rest_protocol
flycash Mar 4, 2020
b40361e
fix haven't read error msg
Patrick0308 Mar 6, 2020
182a367
Merge pull request #392 from Patrick0308/rest_protocol
flycash Mar 8, 2020
1829072
modify rest
Patrick0308 Mar 8, 2020
3a46e04
add rest unit tests
Patrick0308 Mar 9, 2020
fa27aa2
modify rest protocol
Patrick0308 Mar 9, 2020
84a2b65
Merge pull request #394 from Patrick0308/rest
flycash Mar 9, 2020
fa5ee68
rest protocol modify
Patrick0308 Mar 9, 2020
f3b5be5
Merge remote-tracking branch 'upstream/develop' into rest
Patrick0308 Mar 10, 2020
47e3150
change yaml unmarshal function to common package
Patrick0308 Mar 10, 2020
f184ee9
modify yaml
Patrick0308 Mar 10, 2020
f8f2b56
Merge pull request #395 from Patrick0308/rest
zouyx Mar 10, 2020
1fd0ddb
modify rest
Patrick0308 Mar 10, 2020
73119b4
Merge pull request #396 from Patrick0308/rest
zouyx Mar 10, 2020
0c55d99
add yaml unit test
Patrick0308 Mar 12, 2020
46af97f
Merge pull request #399 from Patrick0308/rest
zouyx Mar 12, 2020
fea9106
modify rest config
Patrick0308 Mar 14, 2020
c77e8ff
modify rest interface dir
Patrick0308 Mar 14, 2020
f5fdc0e
modify rest
Patrick0308 Mar 14, 2020
007dd79
modify default reader
Patrick0308 Mar 14, 2020
3271f08
modify error info
Patrick0308 Mar 14, 2020
3364d36
modify
Patrick0308 Mar 14, 2020
e9fc1f8
modify
Patrick0308 Mar 14, 2020
dafc2f4
Merge pull request #402 from Patrick0308/rest
flycash Mar 14, 2020
2d8a5cc
Merge remote-tracking branch 'apache/develop' into feature/rest
fangyincheng Mar 14, 2020
a1ff189
fix rest
Patrick0308 Mar 15, 2020
e81095f
add license
Patrick0308 Mar 15, 2020
72fac64
fix test
Patrick0308 Mar 15, 2020
8c53128
Merge pull request #408 from Patrick0308/rest
zouyx Mar 15, 2020
69de204
Ref: refact config loader
fangyincheng Mar 15, 2020
b988571
Merge remote-tracking branch 'apache/develop' into feature/rest
fangyincheng Mar 15, 2020
57a2a8f
Mrg: merge upstream
fangyincheng Mar 15, 2020
66d8a1a
Del: delete config/rest
fangyincheng Mar 15, 2020
4c50edc
Fix: resolve travis
fangyincheng Mar 15, 2020
1e9392a
Imp: improve config reader
fangyincheng Mar 15, 2020
17c29b5
Fix: fix nil point
fangyincheng Mar 15, 2020
d7cc3af
Fix: reviews
fangyincheng Mar 15, 2020
a4c9d8c
Merge pull request #410 from fangyincheng/feature/rest
fangyincheng Mar 15, 2020
639ddef
Fix: fomat import
fangyincheng Mar 15, 2020
7e7dfdb
Mod: rename file name
fangyincheng Mar 15, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions common/constant/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ const (
DEFAULT_FAILBACK_TIMES = "3"
DEFAULT_FAILBACK_TIMES_INT = 3
DEFAULT_FAILBACK_TASKS = 100
DEFAULT_REST_CLIENT = "resty"
DEFAULT_REST_SERVER = "go-restful"
)

const (
Expand Down
43 changes: 29 additions & 14 deletions common/constant/key.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,21 +174,36 @@ const (
)

const (
CONSUMER_SIGN_FILTER = "sign"
PROVIDER_AUTH_FILTER = "auth"
SERVICE_AUTH_KEY = "auth"
AUTHENTICATOR_KEY = "authenticator"
DEFAULT_AUTHENTICATOR = "accesskeys"
DEFAULT_ACCESS_KEY_STORAGE = "urlstorage"
ACCESS_KEY_STORAGE_KEY = "accessKey.storage"
REQUEST_TIMESTAMP_KEY = "timestamp"
REQUEST_SIGNATURE_KEY = "signature"
AK_KEY = "ak"
SIGNATURE_STRING_FORMAT = "%s#%s#%s#%s"
// name of consumer sign filter
CONSUMER_SIGN_FILTER = "sign"
// name of consumer sign filter
PROVIDER_AUTH_FILTER = "auth"
// name of service filter
SERVICE_AUTH_KEY = "auth"
// key of authenticator
AUTHENTICATOR_KEY = "authenticator"
// name of default authenticator
DEFAULT_AUTHENTICATOR = "accesskeys"
// name of default url storage
DEFAULT_ACCESS_KEY_STORAGE = "urlstorage"
// key of storage
ACCESS_KEY_STORAGE_KEY = "accessKey.storage"
// key of request timestamp
REQUEST_TIMESTAMP_KEY = "timestamp"
// key of request signature
REQUEST_SIGNATURE_KEY = "signature"
// AK key
AK_KEY = "ak"
// signature format
SIGNATURE_STRING_FORMAT = "%s#%s#%s#%s"
// key whether enable signature
PARAMTER_SIGNATURE_ENABLE_KEY = "param.sign"
CONSUMER = "consumer"
ACCESS_KEY_ID_KEY = "accessKeyId"
SECRET_ACCESS_KEY_KEY = "secretAccessKey"
// consumer
CONSUMER = "consumer"
// key of access key id
ACCESS_KEY_ID_KEY = "accessKeyId"
// key of secret access key
SECRET_ACCESS_KEY_KEY = "secretAccessKey"
)

// HealthCheck Router
Expand Down
2 changes: 2 additions & 0 deletions common/constant/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@ import (
)

var (
// The value will be 10^6
// 1ms = 10^6ns
MsToNanoRate = int64(time.Millisecond / time.Nanosecond)
)
6 changes: 6 additions & 0 deletions common/extension/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,27 @@ var (
accesskeyStorages = make(map[string]func() filter.AccessKeyStorage)
)

// SetAuthenticator put the fcn into map with name
func SetAuthenticator(name string, fcn func() filter.Authenticator) {
authenticators[name] = fcn
}

// GetAuthenticator find the Authenticator with name
// if not found, it will panic
func GetAuthenticator(name string) filter.Authenticator {
if authenticators[name] == nil {
panic("authenticator for " + name + " is not existing, make sure you have import the package.")
}
return authenticators[name]()
}

// SetAccesskeyStorages will set the fcn into map with this name
func SetAccesskeyStorages(name string, fcn func() filter.AccessKeyStorage) {
accesskeyStorages[name] = fcn
}

// GetAccesskeyStorages find the storage with the name.
// If not found, it will panic.
func GetAccesskeyStorages(name string) filter.AccessKeyStorage {
if accesskeyStorages[name] == nil {
panic("accesskeyStorages for " + name + " is not existing, make sure you have import the package.")
Expand Down
50 changes: 50 additions & 0 deletions common/extension/config_reader.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package extension

import (
"github.com/apache/dubbo-go/config/interfaces"
)

var (
configReaders = make(map[string]func() interfaces.ConfigReader)
defaults = make(map[string]string)
)

// SetConfigReaders set a creator of config reader.
func SetConfigReaders(name string, v func() interfaces.ConfigReader) {
configReaders[name] = v
}

// GetConfigReaders get a config reader by name.
func GetConfigReaders(name string) interfaces.ConfigReader {
if configReaders[name] == nil {
panic("config reader for " + name + " is not existing, make sure you have imported the package.")
}
return configReaders[name]()
}

// SetDefaultConfigReader set {name} to default config reader for {module}
func SetDefaultConfigReader(module, name string) {
defaults[module] = name
}

// GetDefaultConfigReader
func GetDefaultConfigReader() map[string]string {
return defaults
}
37 changes: 37 additions & 0 deletions common/extension/rest_client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package extension
AlexStocks marked this conversation as resolved.
Show resolved Hide resolved

import (
"github.com/apache/dubbo-go/protocol/rest/client"
)

var (
restClients = make(map[string]func(restOptions *client.RestOptions) client.RestClient, 8)
)

func SetRestClient(name string, fun func(restOptions *client.RestOptions) client.RestClient) {
restClients[name] = fun
}

func GetNewRestClient(name string, restOptions *client.RestOptions) client.RestClient {
if restClients[name] == nil {
panic("restClient for " + name + " is not existing, make sure you have import the package.")
}
return restClients[name](restOptions)
}
37 changes: 37 additions & 0 deletions common/extension/rest_server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package extension
flycash marked this conversation as resolved.
Show resolved Hide resolved

import (
"github.com/apache/dubbo-go/protocol/rest/server"
)

var (
restServers = make(map[string]func() server.RestServer, 8)
)

func SetRestServer(name string, fun func() server.RestServer) {
restServers[name] = fun
}

func GetNewRestServer(name string) server.RestServer {
if restServers[name] == nil {
panic("restServer for " + name + " is not existing, make sure you have import the package.")
}
return restServers[name]()
}
7 changes: 7 additions & 0 deletions common/yaml/testdata/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

intTest: 11
booleanTest: false
strTest: "strTest"

child:
strTest: "childStrTest"
50 changes: 50 additions & 0 deletions common/yaml/yaml.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package yaml
zouyx marked this conversation as resolved.
Show resolved Hide resolved

import (
"io/ioutil"
"path"
)

import (
perrors "github.com/pkg/errors"
"gopkg.in/yaml.v2"
)

// loadYMLConfig Load yml config byte from file
func LoadYMLConfig(confProFile string) ([]byte, error) {
if len(confProFile) == 0 {
return nil, perrors.Errorf("application configure(provider) file name is nil")
}

if path.Ext(confProFile) != ".yml" {
return nil, perrors.Errorf("application configure file name{%v} suffix must be .yml", confProFile)
}

return ioutil.ReadFile(confProFile)
}

// unmarshalYMLConfig Load yml config byte from file , then unmarshal to object
func UnmarshalYMLConfig(confProFile string, out interface{}) ([]byte, error) {
confFileStream, err := LoadYMLConfig(confProFile)
if err != nil {
return confFileStream, perrors.Errorf("ioutil.ReadFile(file:%s) = error:%v", confProFile, perrors.WithStack(err))
}
return confFileStream, yaml.Unmarshal(confFileStream, out)
}
58 changes: 58 additions & 0 deletions common/yaml/yaml_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package yaml
zouyx marked this conversation as resolved.
Show resolved Hide resolved

import (
"path/filepath"
"testing"
)

import (
"github.com/stretchr/testify/assert"
)

func TestUnmarshalYMLConfig(t *testing.T) {
conPath, err := filepath.Abs("./testdata/config.yml")
assert.NoError(t, err)
c := &Config{}
_, err = UnmarshalYMLConfig(conPath, c)
assert.NoError(t, err)
assert.Equal(t, "strTest", c.StrTest)
assert.Equal(t, 11, c.IntTest)
assert.Equal(t, false, c.BooleanTest)
assert.Equal(t, "childStrTest", c.ChildConfig.StrTest)
}

func TestUnmarshalYMLConfig_Error(t *testing.T) {
c := &Config{}
_, err := UnmarshalYMLConfig("./testdata/config", c)
assert.Error(t, err)
_, err = UnmarshalYMLConfig("", c)
assert.Error(t, err)
}

type Config struct {
StrTest string `yaml:"strTest" default:"default" json:"strTest,omitempty" property:"strTest"`
IntTest int `default:"109" yaml:"intTest" json:"intTest,omitempty" property:"intTest"`
BooleanTest bool `yaml:"booleanTest" default:"true" json:"booleanTest,omitempty"`
ChildConfig ChildConfig `yaml:"child" json:"child,omitempty"`
}

type ChildConfig struct {
StrTest string `default:"strTest" default:"default" yaml:"strTest" json:"strTest,omitempty"`
}
29 changes: 3 additions & 26 deletions config/base_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,14 @@
package config

import (
"io/ioutil"
"path"
"bytes"
"reflect"
"strconv"
"strings"
)

import (
perrors "github.com/pkg/errors"
"gopkg.in/yaml.v2"
)

import (
Expand All @@ -50,6 +48,8 @@ type BaseConfig struct {
fatherConfig interface{}

MetricConfig *MetricConfig `yaml:"metrics" json:"metrics,omitempty"`

fileStream *bytes.Buffer
}

// startConfigCenter will start the config center.
Expand Down Expand Up @@ -364,27 +364,4 @@ func initializeStruct(t reflect.Type, v reflect.Value) {

}
}

}

// loadYMLConfig Load yml config byte from file
func loadYMLConfig(confProFile string) ([]byte, error) {
if len(confProFile) == 0 {
return nil, perrors.Errorf("application configure(provider) file name is nil")
}

if path.Ext(confProFile) != ".yml" {
return nil, perrors.Errorf("application configure file name{%v} suffix must be .yml", confProFile)
}

return ioutil.ReadFile(confProFile)
}

// unmarshalYMLConfig Load yml config byte from file , then unmarshal to object
func unmarshalYMLConfig(confProFile string, out interface{}) error {
confFileStream, err := loadYMLConfig(confProFile)
if err != nil {
return perrors.Errorf("ioutil.ReadFile(file:%s) = error:%v", confProFile, perrors.WithStack(err))
}
return yaml.Unmarshal(confFileStream, out)
}
Loading