Middlewares are a collection of hooks that modify various processes of the gateway. All of them are passed into the gateway.WithMiddlewares Option:

gateway.New(..., gateway.WithMiddlewares(middleware1, middleware2))

At the moment the following middleware are provided:

Request Middleware

RequestMiddleware are called during execution when the gateway is sending a request to the backend service to look up the information that the client asked for.

addHeader := gateway.RequestMiddleware(func(r *http.Request) error {
	r.Header.Set("AwesomeHeader", "MyValue")

	// return the modified request
	return nil

Response Middleware

ResponseMiddleware are called during execution after a response has been generated before it is seralized and sent back to the user

logResponse := gateway.ResponseMiddleware(func(ctx *gateway.ExecutionContext, response map[string]interface{}) error {
	// you can also modify the response directly if you wanted

	return nil