HuobiRDCenter / huobi_Golang

Go SDK for Huobi Spot API
https://www.htx.com/zh-cn/opend/newApiPages/
Apache License 2.0
176 stars 86 forks source link

support to use custom http client #25

Open choleraehyq opened 3 years ago

choleraehyq commented 3 years ago

Sometimes we need to use custom Transport or set Timeout.

eynzhang commented 3 years ago

@choleraehyq do you have more concret example?

filinvadim commented 3 years ago

For example instead of:

type MarketClient struct {
    publicUrlBuilder *requestbuilder.PublicUrlBuilder
}

// Initializer
func (p *MarketClient) Init(host string) *MarketClient {
    p.publicUrlBuilder = new(requestbuilder.PublicUrlBuilder).Init(host)
    return p
}

Use pattern 'Constructor' and pass HTTP client as interface argument:

type Requestor interface{
    Get(string) ([]byte, error)
    Post(string, map[string]string) ([]byte, error)
}
type MarketClient struct {
    publicUrlBuilder *requestbuilder.PublicUrlBuilder
        client Requestor
}

func NewMarket(host string, cli Requestor) *MarketClient {
    p.publicUrlBuilder = new(requestbuilder.PublicUrlBuilder).Init(host)
        p.client = cli
    return p
}

func (mc *MarketClient) GetLatestTrade(symbol string) (*market.TradeTick, error) {
    request := new(model.GetRequest).Init()
    request.AddParam("symbol", symbol)

    url := mc.publicUrlBuilder.Build("/market/trade", request)
    resp, err := mc.cli.Get(url)
    if err != nil {
        return nil, err
    }
        result := market.GetLatestTradeResponse{}
    err = json.Unmarshal(resp, &result)
    if err != nil {
        return nil, err
    }
    if result.Status == "ok" && result.Tick != nil {
        return result.Tick, nil
    }
    return nil, errors.New(resp)
}