Documentation
¶
Index ¶
Constants ¶
const ( // TimeoutFieldName таймаут запроса TimeoutFieldName = "client.http.timeout" // MaxIdleConnectionsFieldName общее количество простаивающих соединений MaxIdleConnectionsFieldName = "client.http.maximum.idle.connections" // MaxIdleConnectionsPerHostFieldName простаивающие соединения на хост MaxIdleConnectionsPerHostFieldName = "client.http.maximum.idle.host" // MaxConnectionsPerHostFieldName всего соединений на хост MaxConnectionsPerHostFieldName = "client.http.maximum.connections" // SecureVerifyFieldName проверка TLS сертификата SecureVerifyFieldName = "client.http.secure_verify" // ResolverDNSFieldName DNS-сервер для разрешения ResolverDNSFieldName = "client.http.resolver.dns" )
Variables ¶
var ( TimeoutDefault = 30 * time.Second MaxIdleConnectionsDefault = uint16(100) MaxIdleConnectionsPerHostDefault = uint16(10) MaxConnectionsPerHostDefault = uint16(20) SecureVerifyDefault = true )
var Component = compogo.Component{ Name: "http.client", Init: compogo.StepFunc(func(container compogo.Container) error { return container.Provides( NewConfig, NewDecorator, func(decorator *Decorator) Doer { return decorator }, ) }), BindFlags: compogo.BindFlags(func(flagSet flag.FlagSet, container compogo.Container) error { return container.Invoke(func(config *Config) { flagSet.DurationVar(&config.Timeout, TimeoutFieldName, TimeoutDefault, "request timeout") flagSet.Uint16Var(&config.MaxIdleConnections, MaxIdleConnectionsFieldName, MaxIdleConnectionsDefault, "maximum total number of open connections") flagSet.Uint16Var(&config.MaxIdleConnectionsPerHost, MaxIdleConnectionsPerHostFieldName, MaxIdleConnectionsPerHostDefault, "maximum number of open connections per host") flagSet.Uint16Var(&config.MaxConnectionsPerHost, MaxConnectionsPerHostFieldName, MaxConnectionsPerHostDefault, "maximum number of connections per host") flagSet.BoolVar(&config.SecureVerify, SecureVerifyFieldName, SecureVerifyDefault, "if true, check the TLS certificate") flagSet.StringVar(&config.DNS, ResolverDNSFieldName, "", "If specified, attempts to resolve domain names through the specified DNS server.") }) }), Configuration: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(Configuration) }), PreExecute: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(func(config *Config, logger compogo.Logger) { logger = logger.GetLogger("http").GetLogger("client") logger.Infof("timeout - %s", config.Timeout) logger.Infof("maxIdleConnections - %d", config.MaxIdleConnections) logger.Infof("maxIdleConnectionsPerHost - %d", config.MaxIdleConnectionsPerHost) logger.Infof("maxConnectionsPerHost - %d", config.MaxConnectionsPerHost) logger.Infof("tls secure verify - %s", strconv.FormatBool(config.SecureVerify)) if config.DNS != "" { logger.Infof("dns - %s", config.DNS) } }) }), }
Component — компонент HTTP-клиента для Compogo. Регистрирует конфигурацию и клиент в DI-контейнере.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
Timeout time.Duration
MaxIdleConnections uint16
MaxIdleConnectionsPerHost uint16
MaxConnectionsPerHost uint16
SecureVerify bool
DNS string
}
Config содержит конфигурацию HTTP-клиента.
func Configuration ¶
func Configuration(config *Config, configurator compogo.Configurator) *Config
Configuration загружает конфигурацию из Configurator. Если значения не заданы, устанавливаются значения по умолчанию.
type Decorator ¶
Decorator — обёртка над http.Client с поддержкой middleware. Позволяет добавлять middleware через Use().
func NewDecorator ¶
NewDecorator создаёт новый HTTP-клиент с конфигурацией. Настраивает:
- Таймауты
- Пул соединений (MaxIdleConns, MaxIdleConnsPerHost, MaxConnsPerHost)
- TLS (возможность отключить проверку сертификатов)
- Кастомный DNS-резолвер
func (*Decorator) Use ¶
func (d *Decorator) Use(middlewares ...Middleware)
Use добавляет middleware в клиент. Middleware оборачивают Transport в цепочку обработки.
type Doer ¶
type Doer interface {
Do(request *http.Request) (*http.Response, error)
Use(middlewares ...Middleware)
}
Doer определяет интерфейс для выполнения HTTP-запросов. Расширяет стандартный http.Client методом Use для добавления middleware.
type Middleware ¶
type Middleware interface {
Middleware(next http.RoundTripper) http.RoundTripper
}
Middleware — интерфейс для обёртки http.RoundTripper. Позволяет добавлять логирование, аутентификацию, метрики и т.д.
type MiddlewareFunc ¶
type MiddlewareFunc func(next http.RoundTripper) http.RoundTripper
MiddlewareFunc — функциональный адаптер для Middleware.
func (MiddlewareFunc) Middleware ¶
func (m MiddlewareFunc) Middleware(next http.RoundTripper) http.RoundTripper
Middleware реализует интерфейс Middleware.