Documentation ¶
Index ¶
- func NopMiddleware(next http.Handler) http.Handler
- func NopTripperware(next http.RoundTripper) http.RoundTripper
- type Middleware
- func (m Middleware) Append(middlewares ...Middleware) Middlewares
- func (m Middleware) AppendIf(condition bool, middlewares ...Middleware) Middlewares
- func (m Middleware) Prepend(middlewares ...Middleware) Middlewares
- func (m Middleware) PrependIf(condition bool, middlewares ...Middleware) Middlewares
- type Middlewares
- func (m *Middlewares) Append(middleware ...Middleware) Middlewares
- func (m *Middlewares) AppendIf(condition bool, middleware ...Middleware) Middlewares
- func (m Middlewares) DecorateHandler(handler http.Handler) http.Handler
- func (m Middlewares) DecorateHandlerFunc(handler http.HandlerFunc) http.Handler
- func (m *Middlewares) Prepend(middleware ...Middleware) Middlewares
- func (m *Middlewares) PrependIf(condition bool, middleware ...Middleware) Middlewares
- type RoundTripFunc
- type Tripperware
- func (t Tripperware) Append(tripperwares ...Tripperware) Tripperwares
- func (t Tripperware) AppendIf(condition bool, tripperwares ...Tripperware) Tripperwares
- func (t Tripperware) DecorateClient(client *http.Client, clone bool) *http.Client
- func (t Tripperware) Prepend(tripperwares ...Tripperware) Tripperwares
- func (t Tripperware) PrependIf(condition bool, tripperwares ...Tripperware) Tripperwares
- func (t Tripperware) RoundTrip(req *http.Request) (*http.Response, error)
- type Tripperwares
- func (t *Tripperwares) Append(tripperwares ...Tripperware) Tripperwares
- func (t *Tripperwares) AppendIf(condition bool, tripperwares ...Tripperware) Tripperwares
- func (t Tripperwares) DecorateClient(client *http.Client, clone bool) *http.Client
- func (t Tripperwares) DecorateRoundTripFunc(tripper RoundTripFunc) http.RoundTripper
- func (t Tripperwares) DecorateRoundTripper(tripper http.RoundTripper) http.RoundTripper
- func (t *Tripperwares) Prepend(tripperwares ...Tripperware) Tripperwares
- func (t *Tripperwares) PrependIf(condition bool, tripperwares ...Tripperware) Tripperwares
- func (t Tripperwares) RoundTrip(req *http.Request) (*http.Response, error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NopMiddleware ¶
NopMiddleware just return given http.Handler
func NopTripperware ¶
func NopTripperware(next http.RoundTripper) http.RoundTripper
NopTripperware just return given http.RoundTripper
Types ¶
type Middleware ¶
Middleware represents an http server middleware it wraps an http.Handler with another one
func (Middleware) Append ¶
func (m Middleware) Append(middlewares ...Middleware) Middlewares
Append will add given middlewares after existing one t1.Append(t2, t3) => [t1, t2, t3] t1.Append(t2, t3).DecorateHandler(<yourHandler>) == t1(t2(t3(<yourHandler>)))
func (Middleware) AppendIf ¶
func (m Middleware) AppendIf(condition bool, middlewares ...Middleware) Middlewares
AppendIf will add given middlewares after existing one if condition=true t1.AppendIf(true, t2, t3) => [t1, t2, t3] t1.AppendIf(false, t2, t3) => [t1] t1.AppendIf(true, t2, t3).DecorateHandler(<yourHandler>) == t1(t2(t3(<yourHandler>)))
func (Middleware) Prepend ¶
func (m Middleware) Prepend(middlewares ...Middleware) Middlewares
Prepend will add given middlewares before existing one t1.Prepend(t2, t3) => [t2, t3, t1] t1.Prepend(t2, t3).DecorateHandler(<yourHandler>) == t2(t3(t1(<yourHandler>)))
func (Middleware) PrependIf ¶
func (m Middleware) PrependIf(condition bool, middlewares ...Middleware) Middlewares
PrependIf will add given middlewares before existing one if condition=true t1.PrependIf(true, t2, t3) => [t2, t3, t1] t1.PrependIf(false, t2, t3) => [t1] t1.PrependIf(true, t2, t3).DecorateHandler(<yourHandler>) == t2(t3(t1(<yourHandler>)))
type Middlewares ¶
type Middlewares []Middleware
[t1, t2, t3].DecorateHandler(<yourHandler>) == t1(t2(t3(<yourHandler>)))
func MiddlewareStack ¶
func MiddlewareStack(middlewares ...Middleware) Middlewares
MiddlewareStack allows you to stack multiple middleware collection in a specific order
Example ¶
// create a middleware that adds a requestId header on each http-server request addCustomResponseHeader := func(h http.Handler) http.Handler { return http.HandlerFunc(func(writer http.ResponseWriter, req *http.Request) { writer.Header().Add("custom-response-header", "wonderful header value") h.ServeHTTP(writer, req) }) } // create a middleware that logs the response header on each call logResponseHeaders := func(h http.Handler) http.Handler { return http.HandlerFunc(func(writer http.ResponseWriter, req *http.Request) { fmt.Println("http response headers : ", writer.Header()) h.ServeHTTP(writer, req) }) } // create the middleware stack stack := httpware.MiddlewareStack( addCustomResponseHeader, logResponseHeaders, ) // create a server srv := http.NewServeMux() srv.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { request.Header.Get(correlation_id.HeaderName) writer.WriteHeader(http.StatusOK) }) // apply the middlewares on the server // note: this part is normally done on `http.ListenAndServe(":<serverPort>", stack.DecorateHandler(srv))` h := stack.DecorateHandler(srv) // fake a request req := httptest.NewRequest(http.MethodGet, "/", nil) rr := httptest.NewRecorder() h.ServeHTTP(rr, req)
Output: http response headers : map[Custom-Response-Header:[wonderful header value]]
func (*Middlewares) Append ¶
func (m *Middlewares) Append(middleware ...Middleware) Middlewares
Append will add given middleware after existing one [t1, t2].Append(t3, t4) => [t1, t2, t3, t4] [t1, t2].Append(t3, t4).DecorateHandler(<yourHandler>) == t1(t2(t3(t4(<yourHandler>))))
func (*Middlewares) AppendIf ¶
func (m *Middlewares) AppendIf(condition bool, middleware ...Middleware) Middlewares
AppendIf will add given middleware after existing one if condition=true [t1, t2].AppendIf(true, t3, t4) => [t1, t2, t3, t4] [t1, t2].AppendIf(false, t3, t4) => [t1, t2] [t1, t2].AppendIf(t3, t4).DecorateHandler(<yourHandler>) == t1(t2(t3(t4(<yourHandler>))))
func (Middlewares) DecorateHandler ¶
func (m Middlewares) DecorateHandler(handler http.Handler) http.Handler
DecorateHandler will decorate a given http.Handler with the given middlewares created by MiddlewareStack()
func (Middlewares) DecorateHandlerFunc ¶
func (m Middlewares) DecorateHandlerFunc(handler http.HandlerFunc) http.Handler
DecorateHandler will decorate a given http.HandlerFunc with the given middleware collection created by MiddlewareStack()
func (*Middlewares) Prepend ¶
func (m *Middlewares) Prepend(middleware ...Middleware) Middlewares
Prepend will add given middleware before existing one [t1, t2].Prepend(t3, t4) => [t3, t4, t1, t2] [t1, t2].Prepend(t3, t4).DecorateHandler(<yourHandler>) == t3(t4(t1(t2(<yourHandler>))))
func (*Middlewares) PrependIf ¶
func (m *Middlewares) PrependIf(condition bool, middleware ...Middleware) Middlewares
PrependIf will add given middleware before existing one if condition=true [t1, t2].PrependIf(true, t3, t4) => [t3, t4, t1, t2] [t1, t2].PrependIf(false, t3, t4) => [t1, t2] [t1, t2].PrependIf(true, t3, t4).DecorateHandler(<yourHandler>) == t3(t4(t1(t2(<yourHandler>))))
type RoundTripFunc ¶
RoundTripFunc wraps a func to make it into an http.RoundTripper. Similar to http.HandleFunc.
type Tripperware ¶
type Tripperware func(http.RoundTripper) http.RoundTripper
Tripperware represents an http client-side middleware (roundTripper middleware).
func (Tripperware) Append ¶
func (t Tripperware) Append(tripperwares ...Tripperware) Tripperwares
Append will add given tripperwares after existing one t1.Append(t2, t3) == [t1, t2, t3] t1.Append(t2, t3).DecorateRoundTripper(<yourTripper>) == t1(t2(t3(<yourTripper>)))
func (Tripperware) AppendIf ¶
func (t Tripperware) AppendIf(condition bool, tripperwares ...Tripperware) Tripperwares
AppendIf will add given tripperwares after existing one if condition=true t1.AppendIf(true, t2, t3) == [t1, t2, t3] t1.AppendIf(false, t2, t3) == [t1] t1.AppendIf(true, t2, t3).DecorateRoundTripper(<yourTripper>) == t1(t2(t3(<yourTripper>)))
func (Tripperware) DecorateClient ¶
DecorateClient will decorate a given http.Client with the tripperware will return a clone of client if clone arg is true
func (Tripperware) Prepend ¶
func (t Tripperware) Prepend(tripperwares ...Tripperware) Tripperwares
Prepend will add given tripperwares before existing one t1.Prepend(t2, t3) => [t2, t3, t1] t1.Prepend(t2, t3).DecorateRoundTripper(<yourTripper>) == t2(t3(t1(<yourTripper>)))
func (Tripperware) PrependIf ¶
func (t Tripperware) PrependIf(condition bool, tripperwares ...Tripperware) Tripperwares
PrependIf will add given tripperwares before existing one if condition=true t1.PrependIf(true, t2, t3) => [t2, t3, t1] t1.PrependIf(false, t2, t3) => [t1] t1.PrependIf(true, t2, t3).DecorateRoundTripper(<yourTripper>) == t2(t3(t1(<yourTripper>)))
type Tripperwares ¶
type Tripperwares []Tripperware
[t1, t2, t3].DecorateRoundTripper(roundTripper) == t1(t2(t3(roundTripper)))
func TripperwareStack ¶
func TripperwareStack(tripperwares ...Tripperware) Tripperwares
TripperwareStack allows to stack multi tripperware in order to decorate an http roundTripper
func (*Tripperwares) Append ¶
func (t *Tripperwares) Append(tripperwares ...Tripperware) Tripperwares
Append will add given tripperwares after existing one [t1, t2].Append(true, t3, t4) == [t1, t2, t3, t4] [t1, t2].Append(t3, t4).DecorateRoundTripper(<yourTripper>) == t1(t2(t3(t4(<yourTripper>))))
func (*Tripperwares) AppendIf ¶
func (t *Tripperwares) AppendIf(condition bool, tripperwares ...Tripperware) Tripperwares
Appendif will add given tripperwares after existing one if condition=true [t1, t2].AppendIf(true, t3, t4) == [t1, t2, t3, t4] [t1, t2].AppendIf(false, t3, t4) == [t1, t2] [t1, t2].AppendIf(true, t3, t4).DecorateRoundTripper(<yourTripper>) == t1(t2(t3(t4(<yourTripper>))))
func (Tripperwares) DecorateClient ¶
DecorateClient will decorate a given http.Client with the tripperware collection will return a clone of client if clone arg is true
func (Tripperwares) DecorateRoundTripFunc ¶
func (t Tripperwares) DecorateRoundTripFunc(tripper RoundTripFunc) http.RoundTripper
DecorateRoundTripFunc will decorate a given RoundTripFunc with the tripperware collection
func (Tripperwares) DecorateRoundTripper ¶
func (t Tripperwares) DecorateRoundTripper(tripper http.RoundTripper) http.RoundTripper
DecorateRoundTripper will decorate a given http.RoundTripper with the tripperware collection
func (*Tripperwares) Prepend ¶
func (t *Tripperwares) Prepend(tripperwares ...Tripperware) Tripperwares
Prepend will add given tripperwares before existing one [t1, t2].Prepend(t3, t4) == [t3, t4, t1, t2] [t1, t2].Prepend(t3, t4).DecorateRoundTripper(<yourTripper>) == t3(t4(t1(t2(<yourTripper>))))
func (*Tripperwares) PrependIf ¶
func (t *Tripperwares) PrependIf(condition bool, tripperwares ...Tripperware) Tripperwares
Prependif will add given tripperwares before existing one if condition=true [t1, t2].PrependIf(true, t3, t4) == [t1, t2, t3, t4] [t1, t2].PrependIf(false, t3, t4) == [t1, t2] [t1, t2].PrependIf(true, t3, t4).DecorateRoundTripper(<yourTripper>) == t1(t2(t3(t4(<yourTripper>))))