Documentation
¶
Index ¶
- Variables
- type AuthConfig
- type Body
- type Client
- type FormBody
- type JSONBody
- type Manager
- func (m *Manager) Call(ctx context.Context, serviceID string, req Request, response interface{}) error
- func (m *Manager) CallRaw(ctx context.Context, serviceID string, req Request) (*RawResponse, error)
- func (m *Manager) GetClient(id string) (*Client, error)
- func (m *Manager) ListServices() []string
- func (m *Manager) LoadServices(filePath string) error
- type MultipartBody
- type Option
- type Part
- type RawBody
- type RawResponse
- type Registry
- type RemoteError
- type Request
- type RetryConfig
- type ServiceConfig
- type TLSSettings
Constants ¶
This section is empty.
Variables ¶
var ( ErrRequestFailed = errors.New("remote: request failed") ErrTimeout = errors.New("remote: request timed out") ErrBadRequest = errors.New("remote: invalid request") ErrNotFound = errors.New("remote: resource not found") )
var DefaultRetryConfig = RetryConfig{ MaxRetries: 3, InitialBackoff: 500 * time.Millisecond, MaxBackoff: 10 * time.Second, RetryableStatus: []int{ http.StatusTooManyRequests, http.StatusInternalServerError, http.StatusBadGateway, http.StatusServiceUnavailable, http.StatusGatewayTimeout, }, }
DefaultRetryConfig provides a sensible default for most services.
Functions ¶
This section is empty.
Types ¶
type AuthConfig ¶
type AuthConfig struct {
Type string `json:"type"` // "api_key", "oauth2", "bearer"
Options json.RawMessage `json:"options"`
}
type Body ¶ added in v0.8.0
Body encodes a request payload into wire bytes and the Content-Type header that describes them. The returned Content-Type always wins over the same key in Request.Headers — the encoding (e.g. a multipart boundary) is only valid paired with the Content-Type that names it.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) RawRequest ¶ added in v0.3.0
RawRequest sends req and returns the raw response, uninterpreted. Unlike Request, a non-2xx status is NOT an error: protocols like SOAP deliver faults as HTTP 500 with a meaningful body, so the caller interprets the status and body together. The returned error is transport-level only (connection, timeout, auth application, body encoding). The response body read is capped at maxRawResponseBytes.
type JSONBody ¶ added in v0.8.0
type JSONBody struct {
V any
}
JSONBody marshals V as a JSON request body.
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
func NewManager ¶
func NewManager() *Manager
func (*Manager) CallRaw ¶ added in v0.3.0
CallRaw sends a raw-bodied request (e.g. a SOAP/XML envelope, via req.Body = RawBody{...}) to a registered service. See Client.RawRequest for the error semantics: a non-2xx status is returned in the response, not as an error.
func (*Manager) ListServices ¶
func (*Manager) LoadServices ¶
type MultipartBody ¶ added in v0.8.0
type MultipartBody struct {
Parts []Part
}
MultipartBody encodes Parts as a multipart/form-data request body. Encode generates a fresh boundary on every call, so its Content-Type return must be used verbatim — it cannot be precomputed or cached. Parts are buffered in memory, which keeps the body replayable across retries — size uploads with that in mind. See multipart.go for Part and the encoding itself.
type Option ¶
type Option func(*Client)
func WithAuthenticator ¶
func WithAuthenticator(a auth.Authenticator) Option
func WithClientCertificate ¶ added in v0.3.0
func WithClientCertificate(cert tls.Certificate) Option
WithClientCertificate presents a fixed certificate during the TLS handshake (mTLS). For material that rotates on disk, prefer WithClientCertificateFiles.
func WithClientCertificateFiles ¶ added in v0.3.0
WithClientCertificateFiles presents the client certificate at certFile / keyFile during the TLS handshake (mTLS). The PEM files are read on each handshake — a per-connection, not per-request, cost — so rotated material is picked up by new connections with no restart (zero-downtime rotation), and a missing or malformed file fails the call with a clear error.
func WithTimeout ¶
type Part ¶ added in v0.7.0
type Part struct {
Name string // form field name; required
FileName string // optional; set to send the part as a file
ContentType string // optional; e.g. "application/json", "application/pdf"
Content []byte
}
Part is one part of a multipart/form-data body.
The zero FileName sends a plain form field; a non-empty FileName sends the part as an uploaded file, adding filename="..." to Content-Disposition. ContentType is written as the part's Content-Type header when set, and omitted otherwise — some receivers distinguish a JSON part from a text field by that header alone.
type RawBody ¶ added in v0.8.0
RawBody sends Data verbatim under ContentType — e.g. a SOAP/XML envelope. An empty Data sends no body and sets no Content-Type.
type RawResponse ¶ added in v0.3.0
RawResponse is the undecoded outcome of a RawRequest.
type Registry ¶
type Registry struct {
Version string `json:"version"`
Services []ServiceConfig `json:"services"`
}
type RemoteError ¶
func (*RemoteError) Error ¶
func (e *RemoteError) Error() string
func (*RemoteError) Unwrap ¶
func (e *RemoteError) Unwrap() error
type Request ¶
type Request struct {
Method string
Path string
Query url.Values
Body Body
Headers map[string]string
Retry *RetryConfig // If nil, no retries will be performed
}
Request bundles all the caller-provided parts of an outbound call.
type RetryConfig ¶
type RetryConfig struct {
MaxRetries int // Maximum number of retries (0 = no retries)
InitialBackoff time.Duration // Time to wait before the first retry
MaxBackoff time.Duration // Maximum wait time between retries
RetryableStatus []int // HTTP status codes that should trigger a retry
}
RetryConfig defines the strategy for retrying failed requests.
type ServiceConfig ¶
type ServiceConfig struct {
ID string `json:"id"`
URL string `json:"url"`
Timeout string `json:"timeout"`
Auth *AuthConfig `json:"auth,omitempty"`
TLS *TLSSettings `json:"tls,omitempty"`
}
type TLSSettings ¶ added in v0.3.0
type TLSSettings struct {
ClientCertFile string `json:"client_cert_file"`
ClientKeyFile string `json:"client_key_file"`
}
TLSSettings configures transport-level client authentication (mTLS) for a service. Both values are filesystem paths to PEM files, not secret references: certificate chains routinely exceed the 4 KB cap that secret.SecretRef places on file-sourced secrets.