- access frequence limit
- output detail request when error
This commit is contained in:
24
platformapi/ebaiapi/access_limit.go
Normal file
24
platformapi/ebaiapi/access_limit.go
Normal 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,
|
||||
},
|
||||
}
|
||||
)
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user