Documentation ¶
Overview ¶
Package httpclient provides an HTTP client instrumented with the ex/o11y package, it includes resiliency behaviour such as configurable timeouts, retries, authentication and connection pooling, with support for backing off when a 429 response code is seen.
Index ¶
Constants ¶
const JSON = "application/json; charset=utf-8"
Variables ¶
var ( ErrNoContent = o11y.NewWarning("no content") ErrServerBackoff = errors.New("server requested explicit backoff") )
Functions ¶
func HasStatusCode ¶
HasStatusCode tests err for HTTPError and returns true if any of the codes match the stored code.
func IsNoContent ¶
func IsRequestProblem ¶
IsRequestProblem checks the err for HTTPError and returns true if the stored status code is in the 4xx range
func UnixTransport ¶
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is the o11y instrumented http client.
func (*Client) Call ¶
Call makes the request call. It will trace out a top level span and a span for any retry attempts. Retries will be attempted on any 5XX responses. If the http call completed with a non 2XX status code then an HTTPError will be returned containing details of result of the call.
func (*Client) CloseIdleConnections ¶
func (c *Client) CloseIdleConnections()
CloseIdleConnections is only used for testing.
type Config ¶
type Config struct { // Name is used to identify the client in spans Name string // BaseURL is the URL and optional path prefix to the server that this is a client of. BaseURL string // AuthHeader the name of the header that the AuthToken will be set on. If empty then // the AuthToken will be used in a bearer token authorization header AuthHeader string // AuthToken is the token to use for authentication. AuthToken string // AcceptType if set will be used to set the Accept header. AcceptType string // Timeout is the maximum time any call can take including any retries. // Note that a zero Timeout is not defaulted, but means the client will retry indefinitely. Timeout time.Duration // MaxConnectionsPerHost sets the connection pool size MaxConnectionsPerHost int // UserAgent that will be used for every request UserAgent string // Transport allows overriding the default HTTP transport the client will use. Transport *http.Transport }
Config provides the client configuration
type Decoder ¶
func NewBytesDecoder ¶
NewBytesDecoder decodes the response body into a byte slice
func NewJSONDecoder ¶
func NewJSONDecoder(resp interface{}) Decoder
NewJSONDecoder returns a decoder func enclosing the resp param the func returned takes an io reader which will be passed to a json decoder to decode into the resp.
func NewStringDecoder ¶
NewStringDecoder decodes the response body into a string
type HTTPError ¶
type HTTPError struct {
// contains filtered or unexported fields
}
HTTPError represents an error in an HTTP call when the response status code is not 2XX
type Request ¶
type Request struct { Method string Route string Body interface{} // If set this will be sent as JSON // Deprecated: Use Decoders instead. If set will be used to decode the response body Decoder Decoder Decoders map[int]Decoder // If set will be used to decode the response body by http status code Cookie *http.Cookie Headers map[string]string Timeout time.Duration // The individual per call timeout Query url.Values NoPropagation bool // contains filtered or unexported fields }
Request is an individual http request that the Client will send
func NewRequest ¶
NewRequest should be used to create a new request rather than constructing a Request directly. This encourages the user to specify a "route" for the tracing, and avoid high cardinality routes (when parts of the url may contain many varying values). The returned Request can be further altered before being passed to the client.Call.
func (Request) AddDecoder ¶
AddDecoder returns a new request with a specific response body decoder to some http status code Note this will not modify the original request. Example usage:
err := NewRequest("POST", "/bad", time.Second). AddDecoder(400, NewStringDecoder(&s)). Call(ctx, client)
func (Request) AddSuccessDecoder ¶
AddSuccessDecoder returns a new request with a decoder for all 2xx statuses