- access frequence limit

- output detail request when error
This commit is contained in:
gazebo
2018-10-27 10:10:54 +08:00
parent 56bea8ce11
commit ecb04fbe72
5 changed files with 121 additions and 14 deletions

View File

@@ -0,0 +1,24 @@
package ebaiapi
import "git.rosy.net.cn/baseapi/platformapi"
var (
apiLimitConfig = map[string]*platformapi.LimiterConfig{
"sku.create": &platformapi.LimiterConfig{
MaxAccessCount: 5 - 1,
TimeGapInSecond: 1,
},
"sku.delete": &platformapi.LimiterConfig{
MaxAccessCount: 1,
TimeGapInSecond: 1,
},
"sku.shop.category.delete": &platformapi.LimiterConfig{
MaxAccessCount: 5 - 2,
TimeGapInSecond: 1,
},
"sku.shop.category.create": &platformapi.LimiterConfig{
MaxAccessCount: 5 - 1,
TimeGapInSecond: 1,
},
}
)

View File

@@ -33,11 +33,12 @@ type ResponseResult struct {
}
type API struct {
source string
secret string
encrypt string
client *http.Client
config *platformapi.APIConfig
source string
secret string
encrypt string
client *http.Client
config *platformapi.APIConfig
speedLimiter *platformapi.Limiter
}
func New(source, secret string, config ...*platformapi.APIConfig) *API {
@@ -47,10 +48,11 @@ func New(source, secret string, config ...*platformapi.APIConfig) *API {
curConfig = *config[0]
}
api := &API{
source: source,
secret: secret,
client: &http.Client{Timeout: curConfig.ClientTimeout},
config: &curConfig,
source: source,
secret: secret,
client: &http.Client{Timeout: curConfig.ClientTimeout},
config: &curConfig,
speedLimiter: platformapi.New(apiLimitConfig),
}
return api
}
@@ -70,6 +72,7 @@ func (a *API) signParams(params url.Values) string {
}
func (a *API) AccessAPI(cmd string, body map[string]interface{}) (retVal *ResponseResult, err error) {
a.speedLimiter.AccessAPI(cmd)
if body == nil {
body = make(map[string]interface{}, 0)
}
@@ -85,7 +88,6 @@ func (a *API) AccessAPI(cmd string, body map[string]interface{}) (retVal *Respon
}
params[signKey] = []string{a.signParams(params)}
encodedParams := params.Encode()
err = platformapi.AccessPlatformAPIWithRetry(a.client,
func() *http.Request {
request, _ := http.NewRequest(http.MethodPost, prodURL, strings.NewReader(encodedParams))