Documentation ¶
Overview ¶
Copyright (c) 2024 0x9ef. All rights reserved. Use of this source code is governed by an MIT license that can be found in the LICENSE file.
Package clientx provides functions to build and maintain your own HTTP client.
Copyright (c) 2024 0x9ef. All rights reserved. Use of this source code is governed by an MIT license that can be found in the LICENSE file.
Copyright (c) 2024 0x9ef. All rights reserved. Use of this source code is governed by an MIT license that can be found in the LICENSE file.
Copyright (c) 2024 0x9ef. All rights reserved. Use of this source code is governed by an MIT license that can be found in the LICENSE file.
Copyright (c) 2024 0x9ef. All rights reserved. Use of this source code is governed by an MIT license that can be found in the LICENSE file.
Copyright (c) 2024 0x9ef. All rights reserved. Use of this source code is governed by an MIT license that can be found in the LICENSE file.
Copyright (c) 2024 0x9ef. All rights reserved. Use of this source code is governed by an MIT license that can be found in the LICENSE file.
Index ¶
- Variables
- func ExponentalBackoff(attemptNum int, min, max time.Duration) time.Duration
- type API
- type Decoder
- type Empty
- type Encoder
- type EncoderDecoder
- type Limiter
- type Option
- func WithBaseURL(url string) Option
- func WithDebug() Option
- func WithHTTPClient(client *http.Client) Option
- func WithHeader(key string, value string) Option
- func WithHeaderSet(headers map[string][]string) Option
- func WithRateLimit(limit int, burst int, per time.Duration) Option
- func WithRetry(maxAttempts int, minWaitTime, maxWaitTime time.Duration, f RetryFunc, ...) Option
- type OptionRateLimit
- type OptionRetry
- type Options
- type ParamEncoder
- type RequestBuilder
- func (rb *RequestBuilder[Req, Resp]) AfterResponse(f func(resp *http.Response, decoded *Resp) error) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) Connect(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) Delete(path string, body *Req, opts ...RequestOption) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) Do(ctx context.Context) (*http.Response, error)
- func (rb *RequestBuilder[Req, Resp]) DoWithDecode(ctx context.Context, enc ...EncoderDecoder) (*Resp, error)
- func (rb *RequestBuilder[Req, Resp]) Get(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) Head(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) Options(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) Patch(path string, body *Req, opts ...RequestOption) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) Post(path string, body *Req, opts ...RequestOption) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) Put(path string, body *Req, opts ...RequestOption) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) Trace(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) WithEncodableQueryParams(params ...ParamEncoder[Req]) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) WithErrorDecode(f func(resp *http.Response) (bool, error)) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) WithForm(obj url.Values) *RequestBuilder[Req, Resp]
- func (rb *RequestBuilder[Req, Resp]) WithQueryParams(tag string, params ...Req) *RequestBuilder[Req, Resp]
- type RequestOption
- type Retrier
- type RetryCond
- type RetryFunc
Constants ¶
This section is empty.
Variables ¶
var BlankEncoderDecoder = &blankEncoderDecoder{}
Blank (No Action) Encoder/Decoder realization.
var ErrRateLimitExceeded = errors.New("rate limit is exceeded")
var JSONEncoderDecoder = &jsonEncoderDecoder{}
JSON Encoder/Decoder realization.
var XMLEncoderDecoder = &xmlEncoderDecoder{}
XML Encoder/Decoder realization.
Functions ¶
Types ¶
type API ¶
type API struct {
// contains filtered or unexported fields
}
API represents general base API which has to be inherited.
type DuffelAPI struct { *clientx.API }
type EncoderDecoder ¶
type Limiter ¶
type Limiter interface { Wait(ctx context.Context) error SetBurstAt(at time.Time, burst int) SetLimitAt(at time.Time, limit rate.Limit) }
Limiter is a general interface responsible for rate-limiting functional.
type Option ¶
type Option func(*Options)
func WithBaseURL ¶
WithBaseURL sets base URL to perform requests.
func WithDebug ¶
func WithDebug() Option
WithDebug enables debug logging of requests and responses. DO NOT USE IN PRODUCTION.
func WithHTTPClient ¶
WithHTTPClient allows you to specify a custom http.Client to use for making requests. This is useful if you want to use a custom transport or proxy.
func WithHeader ¶
WithHeader sets global header. Overwrites values related to key.
func WithHeaderSet ¶
WithHeaderSet sets global headers. Overwrites previously defined header set.
func WithRateLimit ¶
WithRateLimit sets burst and limit for a ratelimiter.
type OptionRateLimit ¶
type OptionRetry ¶
type Options ¶
type Options struct { BaseURL string HttpClient *http.Client Headers http.Header // Debug prints responses into os.Stdout. Debug bool // RateLimitParseFn is a custom function that parses rate limits from HTTP response. // For example from X-Ratelimit-Limit, X-Ratelimit-Remaining headers. RateLimitParseFn func(*http.Response) (limit int, remaining int, resetAt time.Time, err error) RateLimit *OptionRateLimit Retry *OptionRetry }
type ParamEncoder ¶
func NormalizeParams ¶
func NormalizeParams[T ParamEncoder[T]](params []T) []ParamEncoder[T]
type RequestBuilder ¶
func NewRequestBuilder ¶
func NewRequestBuilder[Req any, Resp any](api *API) *RequestBuilder[Req, Resp]
NewRequestBuilder creates a new request builder from API for designated Req, Resp. Default method is GET. If you want to specify method, you should call corresponding Get/Post/Put/Patch/Delete methods.
func (*RequestBuilder[Req, Resp]) AfterResponse ¶
func (rb *RequestBuilder[Req, Resp]) AfterResponse(f func(resp *http.Response, decoded *Resp) error) *RequestBuilder[Req, Resp]
AfterResponse adds to a chain function that will be executed after response is obtained. Note! The second argument (decoded) in f function is only available when using DoWithDecode method to perform request.
func (*RequestBuilder[Req, Resp]) Connect ¶
func (rb *RequestBuilder[Req, Resp]) Connect(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
Connect builds CONNECT request. Appends request options.
func (*RequestBuilder[Req, Resp]) Delete ¶
func (rb *RequestBuilder[Req, Resp]) Delete(path string, body *Req, opts ...RequestOption) *RequestBuilder[Req, Resp]
Delete builds DELETE request with specified body (if any). Appends request options.
func (*RequestBuilder[Req, Resp]) Do ¶
Do executes request and returns *http.Response. Returns error if any.
func (*RequestBuilder[Req, Resp]) DoWithDecode ¶
func (rb *RequestBuilder[Req, Resp]) DoWithDecode(ctx context.Context, enc ...EncoderDecoder) (*Resp, error)
DoWithDecode executes request and decodes response into Resp object. Returns error if any.
func (*RequestBuilder[Req, Resp]) Get ¶
func (rb *RequestBuilder[Req, Resp]) Get(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
Get builds GET request with no body specified. Appends request options (includes request options that were specified at NewRequestBuilder).
func (*RequestBuilder[Req, Resp]) Head ¶
func (rb *RequestBuilder[Req, Resp]) Head(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
Head builds HEAD request. Appends request options.
func (*RequestBuilder[Req, Resp]) Options ¶
func (rb *RequestBuilder[Req, Resp]) Options(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
Options builds OPTIONS request. Appends request options.
func (*RequestBuilder[Req, Resp]) Patch ¶
func (rb *RequestBuilder[Req, Resp]) Patch(path string, body *Req, opts ...RequestOption) *RequestBuilder[Req, Resp]
Patch builds PATCH request with specified body (if any). Appends request options.
func (*RequestBuilder[Req, Resp]) Post ¶
func (rb *RequestBuilder[Req, Resp]) Post(path string, body *Req, opts ...RequestOption) *RequestBuilder[Req, Resp]
Post builds POST request with specified body. Appends request options.
func (*RequestBuilder[Req, Resp]) Put ¶
func (rb *RequestBuilder[Req, Resp]) Put(path string, body *Req, opts ...RequestOption) *RequestBuilder[Req, Resp]
Put builds PUT request with specified body (if any). Appends request options.
func (*RequestBuilder[Req, Resp]) Trace ¶
func (rb *RequestBuilder[Req, Resp]) Trace(path string, opts ...RequestOption) *RequestBuilder[Req, Resp]
Trace builds TRACE request. Appends request options.
func (*RequestBuilder[Req, Resp]) WithEncodableQueryParams ¶
func (rb *RequestBuilder[Req, Resp]) WithEncodableQueryParams(params ...ParamEncoder[Req]) *RequestBuilder[Req, Resp]
WithEncodableQueryParams sets URL query parameters from structure which implements ParamEncoder interface.
func (*RequestBuilder[Req, Resp]) WithErrorDecode ¶
func (rb *RequestBuilder[Req, Resp]) WithErrorDecode(f func(resp *http.Response) (bool, error)) *RequestBuilder[Req, Resp]
WithErrorDecode sets custom error decoding function. Will be executed immediately after request is performed.
func (*RequestBuilder[Req, Resp]) WithForm ¶
func (rb *RequestBuilder[Req, Resp]) WithForm(obj url.Values) *RequestBuilder[Req, Resp]
WithForm sets the form data for the request.
func (*RequestBuilder[Req, Resp]) WithQueryParams ¶
func (rb *RequestBuilder[Req, Resp]) WithQueryParams(tag string, params ...Req) *RequestBuilder[Req, Resp]
WithQueryParams sets URL query parameters from structure by accesing field with provided tag alias.
type RequestOption ¶
func WithRequestForm ¶
func WithRequestForm(form url.Values) RequestOption
func WithRequestHeaders ¶
func WithRequestHeaders(headers map[string][]string) RequestOption
func WithRequestQueryEncodableParams ¶
func WithRequestQueryEncodableParams[T any](params ...ParamEncoder[T]) RequestOption
WithRequestQueryEncodableParams encodes query params by implementing ParamEncoder[T] interface, calls Encode(url.Values) functional to set query params.
func WithRequestQueryParams ¶
func WithRequestQueryParams[T any](tag string, params ...T) RequestOption
WithRequestQueryParams encodes query params automatically by accesing fields with custom tag.