Documentation
¶
Index ¶
- Constants
- Variables
- func DefaultHTTP2TransportSettings(in *http2.Transport)
- func DefaultHTTPTransportSettings(in *http.Transport)
- func FixupEndpointURLScheme(u string) string
- func HasAsyncID(ctx context.Context) (string, bool)
- func IsAsyncJobInProgress(err error) (string, bool)
- func IsAsyncRequest(ctx context.Context) bool
- func IsCleartextEndpoint(e Endpoint) bool
- func IsCodeError(err error, code int) bool
- func IsNotFoundError(err error) bool
- func New[T any](mods ...Mod[T]) T
- func NewError(code int, message string) error
- func NewErrorAsyncJobInProgress(jobID string) error
- func NewErrorf(code int, message string, args ...interface{}) error
- func NewHTTP2DialForEndpoint(e Endpoint) ...
- func NewNotFoundError(msg string) error
- func NewUrl(parts ...string) string
- func RequestDBNameValueExtractor(requestMethod, requestPath string) (string, error)
- func ValidateEndpointSchemes(e Endpoint) error
- func WithAsync(parent context.Context) context.Context
- func WithAsyncID(parent context.Context, asyncID string) context.Context
- func WithHTTP2Cleartext(in *http2.Transport)
- func WithHTTP2InsecureSkipVerify(in *http2.Transport)
- func WithHTTPInsecureSkipVerify(in *http.Transport)
- type ArangoDBConfiguration
- type Array
- type AsyncConnectionWrapper
- type Authentication
- type AuthenticationGetter
- type Compression
- type CompressionConfig
- type CompressionType
- type Connection
- func NewConnectionAsyncWrapper(conn Connection) Connection
- func NewHttp2Connection(config Http2Configuration) Connection
- func NewHttpConnection(config HttpConfiguration) Connection
- func NewPool(connections int, factory Factory) (Connection, error)
- func NewRetryWrapper(conn Connection, retries int, wrapper RetryWrapper) Connection
- func RetryOn503(conn Connection, retries int) Connection
- type ContextKey
- type Decoder
- type EncodingCodec
- type Endpoint
- type Error
- type ErrorAsyncJobInProgress
- type Factory
- type Http2Configuration
- type HttpConfiguration
- type Mod
- type RawObject
- type Request
- type RequestHashValueExtractor
- type RequestModifier
- type Response
- func Call(ctx context.Context, c Connection, method, url string, output interface{}, ...) (Response, error)
- func CallDelete(ctx context.Context, c Connection, url string, output interface{}, ...) (Response, error)
- func CallGet(ctx context.Context, c Connection, url string, output interface{}, ...) (Response, error)
- func CallHead(ctx context.Context, c Connection, url string, output interface{}, ...) (Response, error)
- func CallPatch(ctx context.Context, c Connection, url string, output interface{}, ...) (Response, error)
- func CallPost(ctx context.Context, c Connection, url string, output interface{}, ...) (Response, error)
- func CallPut(ctx context.Context, c Connection, url string, output interface{}, ...) (Response, error)
- func CallStream(ctx context.Context, c Connection, method, url string, ...) (Response, io.ReadCloser, error)
- func CallWithChecks(ctx context.Context, c Connection, method, url string, output interface{}, ...) (Response, error)
- type RetryWrapper
- type Wrapper
Constants ¶
const ( PlainText = "text/plain" ApplicationOctetStream = "application/octet-stream" ApplicationZip = "application/zip" ApplicationJSON = "application/json" )
const ( ArangoHeaderAsyncIDKey = "x-arango-async-id" ArangoHeaderAsyncKey = "x-arango-async" ArangoHeaderAsyncValue = "store" )
const (
ContentType = "content-type"
)
Variables ¶
var ErrReaderOutputBytes = errors.New("use *[]byte as output argument")
ErrReaderOutputBytes is the error to inform caller about invalid output argument.
var ErrWriterInputBytes = errors.New("use []byte as input argument")
ErrWriterInputBytes is the error to inform caller about invalid input argument.
Functions ¶
func FixupEndpointURLScheme ¶
FixupEndpointURLScheme changes endpoint URL schemes used by arangod to ones used by go. E.g. "tcp://localhost:8529" -> "http://localhost:8529"
func HasAsyncID ¶
HasAsyncID returns the async Job ID from the given context.
func IsAsyncJobInProgress ¶
func IsAsyncRequest ¶
IsAsyncRequest returns true if the given context is an async request.
func IsCleartextEndpoint ¶
IsCleartextEndpoint reports whether ALL URLs in e use the http:// scheme. Mixed-scheme endpoint lists (some http://, some https://) are not supported; use ValidateEndpointSchemes to detect this condition before constructing a connection. Endpoints using ArangoDB-native schemes (e.g. tcp://) must be normalized with FixupEndpointURLScheme before being passed here.
func IsCodeError ¶
func IsNotFoundError ¶
func NewHTTP2DialForEndpoint ¶
func NewNotFoundError ¶
func RequestDBNameValueExtractor ¶
RequestDBNameValueExtractor might be used as RequestHashValueExtractor to use DB name from URL for hashing It fallbacks to requestMethod+requestPath concatenation in case if path does not contain DB name
func ValidateEndpointSchemes ¶
ValidateEndpointSchemes returns an error if any URL in the endpoint list uses an unsupported scheme or if the list mixes http:// and https:// URLs. Only "http" and "https" are accepted; ArangoDB-native schemes (tcp://, ssl://) must be normalized with FixupEndpointURLScheme before endpoints are constructed.
func WithAsync ¶
WithAsync is used to configure a context to make an async operation - requires Connection with Async wrapper!
func WithAsyncID ¶
WithAsyncID is used to check an async operation result - requires Connection with Async wrapper!
func WithHTTP2Cleartext ¶
WithHTTP2Cleartext configures h2c (HTTP/2 cleartext) transport for plain-HTTP endpoints. Use this modifier when connecting to http:// endpoints. ArangoDB-native tcp:// endpoints must be normalized with FixupEndpointURLScheme before use.
func WithHTTP2InsecureSkipVerify ¶
WithHTTP2InsecureSkipVerify configures TLS certificate verification to be skipped for HTTPS endpoints (e.g. self-signed certificates). For cleartext endpoints use WithHTTP2Cleartext.
Types ¶
type ArangoDBConfiguration ¶
type ArangoDBConfiguration struct {
// ArangoQueueTimeoutEnabled is used to enable Queue timeout on the server side.
// If ArangoQueueTimeoutEnabled is used, then its value takes precedence.
// In another case value of context.Deadline will be taken
ArangoQueueTimeoutEnabled bool
// ArangoQueueTimeout defines max queue timeout on the server side
ArangoQueueTimeoutSec uint
// DriverFlags configure additional flags for the `x-arango-driver` header
DriverFlags []string
// Compression is used to enable compression between client and server
Compression *CompressionConfig
}
type Array ¶
type Array struct {
// contains filtered or unexported fields
}
func (*Array) UnmarshalJSON ¶
type AsyncConnectionWrapper ¶
type AsyncConnectionWrapper struct {
Connection
}
type Authentication ¶
func NewBasicAuth ¶
func NewBasicAuth(username, password string) Authentication
func NewHeaderAuth ¶
func NewHeaderAuth(key, value string, args ...interface{}) Authentication
type AuthenticationGetter ¶
type AuthenticationGetter func(ctx context.Context, conn Connection) (Authentication, error)
type Compression ¶
type CompressionConfig ¶
type CompressionConfig struct {
// CompressionConfig is used to enable compression for the requests
CompressionType CompressionType
// ResponseCompressionEnabled is used to enable compression for the responses (requires server side adjustments)
ResponseCompressionEnabled bool
// RequestCompressionEnabled is used to enable compression for the requests
RequestCompressionEnabled bool
// RequestCompressionLevel - Sets the compression level between -1 and 9
// Default: 0 (NoCompression). For Reference see: https://pkg.go.dev/compress/flate#pkg-constants
RequestCompressionLevel int
}
CompressionConfig is used to enable compression for the connection
type CompressionType ¶
type CompressionType string
const ( // RequestCompressionTypeGzip is used to enable gzip compression RequestCompressionTypeGzip CompressionType = "gzip" // RequestCompressionTypeDeflate is used to enable deflate compression RequestCompressionTypeDeflate CompressionType = "deflate" )
type Connection ¶
type Connection interface {
// NewRequest initializes Request object
NewRequest(method string, urls ...string) (Request, error)
// NewRequestWithEndpoint initializes a Request object with a specific endpoint
NewRequestWithEndpoint(endpoint string, method string, urls ...string) (Request, error)
// Do execute the given Request and parses the response into output
// If allowed status codes are provided, they will be checked before decoding the response body.
// In case of mismatch shared.ArangoError will be returned
Do(ctx context.Context, request Request, output interface{}, allowedStatusCodes ...int) (Response, error)
// Stream executes the given Request and returns a reader for Response body
Stream(ctx context.Context, request Request) (Response, io.ReadCloser, error)
// GetEndpoint returns Endpoint which is currently used to execute requests
GetEndpoint() Endpoint
// SetEndpoint changes Endpoint which is used to execute requests
SetEndpoint(e Endpoint) error
// GetAuthentication returns Authentication
GetAuthentication() Authentication
// SetAuthentication returns Authentication parameters used to execute requests
SetAuthentication(a Authentication) error
// Decoder returns Decoder to use for Response body decoding
Decoder(contentType string) Decoder
// GetConfiguration returns the configuration for the connection to database
GetConfiguration() ArangoDBConfiguration
// SetConfiguration sets the configuration for the connection to database
SetConfiguration(config ArangoDBConfiguration)
}
func NewConnectionAsyncWrapper ¶
func NewConnectionAsyncWrapper(conn Connection) Connection
func NewHttp2Connection ¶
func NewHttp2Connection(config Http2Configuration) Connection
NewHttp2Connection Warning: Ensure that VST is not enabled to avoid performance issues
func NewHttpConnection ¶
func NewHttpConnection(config HttpConfiguration) Connection
func NewRetryWrapper ¶
func NewRetryWrapper(conn Connection, retries int, wrapper RetryWrapper) Connection
func RetryOn503 ¶
func RetryOn503(conn Connection, retries int) Connection
type ContextKey ¶
type ContextKey string
type EncodingCodec ¶
type EncodingCodec interface {
}
type Endpoint ¶
type Endpoint interface {
// Get returns provided endpoint if it is known, otherwise chooses one endpoint from existing list
// Endpoint implementation might use the Request method and path values to determine which endpoint to return
Get(endpoint, method, path string) (string, error)
// List returns known endpoints
List() []string
}
func NewMaglevHashEndpoints ¶
func NewMaglevHashEndpoints(eps []string, extractor RequestHashValueExtractor) (Endpoint, error)
NewMaglevHashEndpoints returns Endpoint manager which consistently returns the same endpoint based on value extracted from request using provided RequestHashValueExtractor e.g. if you want to use DB name from URL for hashing you can use RequestDBNameValueExtractor
func NewRoundRobinEndpoints ¶
NewRoundRobinEndpoints returns Endpoint manager which runs round-robin
type ErrorAsyncJobInProgress ¶
type ErrorAsyncJobInProgress struct {
// contains filtered or unexported fields
}
func (ErrorAsyncJobInProgress) Error ¶
func (a ErrorAsyncJobInProgress) Error() string
type Factory ¶
type Factory func() (Connection, error)
type Http2Configuration ¶
type Http2Configuration struct {
Authentication Authentication
Endpoint Endpoint
ContentType string
ArangoDBConfig ArangoDBConfiguration
Transport *http2.Transport
}
func DefaultHTTP2ConfigurationWrapper ¶
func DefaultHTTP2ConfigurationWrapper(endpoint Endpoint, insecureSkipVerify bool) Http2Configuration
func (Http2Configuration) GetContentType ¶
func (h Http2Configuration) GetContentType() string
type HttpConfiguration ¶
type HttpConfiguration struct {
Authentication Authentication
Endpoint Endpoint
ContentType string
ArangoDBConfig ArangoDBConfiguration
Transport http.RoundTripper
// DontFollowRedirect; if set, redirect will not be followed, response from the initial request will be returned without an error
// DontFollowRedirect takes precendance over FailOnRedirect.
DontFollowRedirect bool
}
func DefaultHTTPConfigurationWrapper ¶
func DefaultHTTPConfigurationWrapper(endpoint Endpoint, insecureSkipVerify bool) HttpConfiguration
func (HttpConfiguration) GetContentType ¶
func (h HttpConfiguration) GetContentType() string
type Mod ¶
type Mod[T any] func(in *T)
func WithHTT2PEndpoint ¶
func WithHTT2PEndpoint(endpoint Endpoint) Mod[Http2Configuration]
func WithHTTP2Transport ¶
func WithHTTP2Transport(mods ...Mod[http2.Transport]) Mod[Http2Configuration]
func WithHTTPEndpoint ¶
func WithHTTPEndpoint(endpoint Endpoint) Mod[HttpConfiguration]
func WithHTTPTransport ¶
func WithHTTPTransport(mods ...Mod[http.Transport]) Mod[HttpConfiguration]
type RawObject ¶
type RawObject []byte
RawObject is a raw encoded object. Connection implementations must be able to unmarshal *RawObject into Go objects.
type RequestHashValueExtractor ¶
RequestHashValueExtractor accepts request method and full request path and must return a value which will be used for hash calculation
type RequestModifier ¶
func WithBody ¶
func WithBody(i interface{}) RequestModifier
func WithFragment ¶
func WithFragment(s string) RequestModifier
func WithQuery ¶
func WithQuery(s, value string) RequestModifier
func WithTransactionID ¶
func WithTransactionID(transactionID string) RequestModifier
type Response ¶
type Response interface {
// Code returns an HTTP compatible status code of the response.
Code() int
// Response returns underlying response object
Response() interface{}
// Endpoint returns the endpoint that handled the request.
Endpoint() string
// Content returns Content-Type
Content() string
// Header gets the first value associated with the given key.
// If there are no values associated with the key, Get returns "".
Header(name string) string
RawResponse() *http.Response
}
func Call ¶
func Call(ctx context.Context, c Connection, method, url string, output interface{}, modifiers ...RequestModifier) (Response, error)
func CallDelete ¶
func CallDelete(ctx context.Context, c Connection, url string, output interface{}, modifiers ...RequestModifier) (Response, error)
func CallGet ¶
func CallGet(ctx context.Context, c Connection, url string, output interface{}, modifiers ...RequestModifier) (Response, error)
func CallHead ¶
func CallHead(ctx context.Context, c Connection, url string, output interface{}, modifiers ...RequestModifier) (Response, error)
func CallPatch ¶
func CallPatch(ctx context.Context, c Connection, url string, output interface{}, body interface{}, modifiers ...RequestModifier) (Response, error)
func CallPost ¶
func CallPost(ctx context.Context, c Connection, url string, output interface{}, body interface{}, modifiers ...RequestModifier) (Response, error)
func CallPut ¶
func CallPut(ctx context.Context, c Connection, url string, output interface{}, body interface{}, modifiers ...RequestModifier) (Response, error)
func CallStream ¶
func CallStream(ctx context.Context, c Connection, method, url string, modifiers ...RequestModifier) (Response, io.ReadCloser, error)
CallStream performs HTTP request with the given method and URL. It returns the response and body reader to read the data from there. The caller is responsible to free the response body.
func CallWithChecks ¶
func CallWithChecks(ctx context.Context, c Connection, method, url string, output interface{}, allowedStatusCodes []int, modifiers ...RequestModifier) (Response, error)
type RetryWrapper ¶
type Wrapper ¶
type Wrapper func(c Connection) Connection
func NewJWTAuthWrapper ¶
func NewSSOAuthWrapper ¶
func WrapAuthentication ¶
func WrapAuthentication(getter AuthenticationGetter) Wrapper
Source Files
¶
- auth.go
- auth_basic_impl.go
- auth_header_impl.go
- auth_jwt_impl.go
- call.go
- connection.go
- connection_compression.go
- connection_configuration.go
- connection_http.go
- connection_http2.go
- connection_http_content-type.go
- connection_http_internal.go
- connection_http_request.go
- connection_http_response.go
- connection_pool.go
- context.go
- data_array.go
- data_stream.go
- decoder.go
- endpoint.go
- endpoints_maglev_hash.go
- endpoints_round_robin.go
- error.go
- modifiers.go
- wrapper_async.go
- wrapper_reauthentication.go
- wrapper_retry.go