Add interceptors to http.Client and you will be able to
* Dump request and/or response to a Log
* Alter your requests before they are sent or responses before they are returned
* Add Tracing information using Opentracing/Jaeger
* Send metrics to statsd
All this and more while using a "regular" http.Client
var client *http.Client
client = mediary.Init().AddInterceptors(your interceptor).Build()
client.Get("https://golang.org")
client := mediary.Init().AddInterceptors(dumpInterceptor).Build()
client.Get("https://golang.org")
func dumpInterceptor(req *http.Request, handler mediary.Handler) (*http.Response, error) {
if bytes, err := httputil.DumpRequestOut(req, true); err == nil {
fmt.Printf("%s", bytes)
//GET / HTTP/1.1
//Host: golang.org
//User-Agent: Go-http-client/1.1
//Accept-Encoding: gzip
}
return handler(req)
}
Interceptor is a function
type Interceptor func(http.Request, Handler) (http.Response, error)
Handler is just an alias to http.Roundtripper function called RoundTrip
type Handler func(http.Request) (http.Response, error)
It's possible to chain interceptors
client := mediary.Init().
AddInterceptors(First Interceptor, Second Interceptor).
AddInterceptors(Third Interceptor).
Build()
This is how it actually works - First Intereptor: Request - Second Interceptor: Request - Third Interceptor: Request - Handler <-- Actual http call - Third Interceptor: Response - Second Interceptor: Response - First Interceptor: Response
If you already have a pre-configured http.Client you can use it as well
yourClient := &http.Client{}
yourClientWithInterceptor := mediary.Init().
WithPreconfiguredClient(yourClient).
AddInterceptors(your interceptor).
Build()
Read this for more information
$ claude mcp add mediary \
-- python -m otcore.mcp_server <graph>