mediary

package module
Version: v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2020 License: Apache-2.0 Imports: 1 Imported by: 4

README

mediary

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

Usage

var client *http.Client
client = mediary.Init().AddInterceptors(your interceptor).Build()
client.Get("https://golang.org")

Dump Example

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

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)

Multiple interceptors

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

Using custom client/transport

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Builder

type Builder interface {
	AddInterceptors(...Interceptor) Builder
	WithPreconfiguredClient(*http.Client) Builder
	Build() *http.Client
}

Builder is a builder interface to help guide and create a mediary instance

func Init

func Init() Builder

Init initializes mediary instance configuration

type Handler

type Handler func(*http.Request) (*http.Response, error)

Handler is just an alias to http.RoundTriper.RoundTrip function

type Interceptor

type Interceptor func(*http.Request, Handler) (*http.Response, error)

Interceptor is a user defined function that can alter a request before it's sent and/or alter a response before it's returned to the caller

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL