Documentation ¶
Index ¶
Constants ¶
const RawQueryContextKey contextKey = "RAW_QUERY"
RawQueryContextKey is the context key the jq query is stored under on requests.
const RawQueryHTTPHeader string = "JQ"
RawQueryHTTPHeader is the HTTP request header where the jq query is read from.
Variables ¶
var ( // ErrInvalidResponseBody signals that an upstream response contained invalid // JSON. ErrInvalidResponseBody = errors.New("upstream response is invalid JSON") // ErrIllegalResponseType signals that an upstream response's Content-Type was // not application/json. ErrIllegalResponseType = errors.New("upstream response is not application/json") // ErrIllegalQueryResult signals that a query resulted in a result type that // has no JSON representation on its own. ErrIllegalQueryResult = errors.New("query resulted in primitive type") )
Upstream errors.
var HeaderParser = func(f http.HandlerFunc, logger *log.Logger) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { mediaType, _, err := mime.ParseMediaType(r.Header.Get("Accept")) if err != nil || mediaType != "application/json" { f(w, r) return } rawQuery := r.Header.Get(string(RawQueryHTTPHeader)) if rawQuery == "" { f(w, r) return } log.Query(logger, r, rawQuery) f(w, r.WithContext(context.WithValue(r.Context(), RawQueryContextKey, rawQuery))) } }
HeaderParser attaches the JQ request header value as a context key on client requests.
var RequestID = func(f http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if r.Header.Get("X-Request-ID") == "" { r.Header.Set("X-Request-ID", uuid.NewString()) } f(w, r) } }
RequestID sets the X-Request-ID header to a UUID if not already set.
Functions ¶
func ErrorHandler ¶
ErrorHandler writes the response status code in case of errors.
Types ¶
type Config ¶
type Config struct { Port int CacheSize int EvaluationTimeout time.Duration ReadTimeout time.Duration WriteTimeout time.Duration DialTimeout time.Duration DialKeepAlive time.Duration TLSHandshakeTimeout time.Duration ResponseHeaderTimeout time.Duration ExpectContinueTimeout time.Duration Level log.Level }
Config is the runtime configuration of jqrp.
func NewConfig ¶
func NewConfig() *Config
NewConfig returns a configuration read from environment variables.
type Proxy ¶
type Proxy struct {
// contains filtered or unexported fields
}
Proxy is a mutating reverse proxy.
type Transformer ¶
type Transformer struct {
// contains filtered or unexported fields
}
Transformer transforms some upstream responses.
func NewTransformer ¶
func NewTransformer(evaluator jq.Evaluator, rewriter rewriter) *Transformer
NewTransformer returns a new Transformer.
func (*Transformer) ModifyResponse ¶
func (t *Transformer) ModifyResponse(r *http.Response) error
ModifyResponse transforms responses to JSON requests that have the jq query header set.