package
1.0.0
Repository: https://github.com/apex/go-apex.git
Documentation: pkg.go.dev

# README

API Gateway Proxy request handling support

This package provides an Apex-compatible handler for proxy requests.

Each proxy request matches a wildcard path in AWS API Gateway, which is then converted to a standard http.Request before dispatching using the http.Handler interface.

Usage

Any router or middleware framework supporting the http.Handler interface should be compatible with this adapter.

package main

import (
	"net/http"

	"github.com/apex/go-apex"
	"github.com/apex/go-apex/proxy"
)

func main() {
	mux := http.NewServeMux()
	mux.HandleFunc("/", hello)
	mux.HandleFunc("/foo", foo)
	mux.HandleFunc("/bar", bar)
	apex.Handle(proxy.Serve(mux))
}

...

Notes

Stdout vs Stderr

As with any Apex handler, you must make sure that your handler doesn't write anything to stdout. If your web framework logs to stdout by default, such as Martini, you need to change the logger output to use stderr.

Content-Types passed through as plain text output:

Any output with a Content-Type that doesn't match one of those listed below will be Base64 encoded in the output record. In order for this to be returned from API Gateway correctly, you will need to enable binary support and map the content types containing binary data.

In practice you can usually map all types as binary using the */* pattern for binary support if you aren't using other API Gateway resources which conflict with this.

The text-mode Content-Type regular expressions used by default are:

* text/.*
* application/json
* application/.*\+json
* application/xml
* application/.*\+xml

You can override this by calling proxy.SetTextContentTypes with a list of regular expressions matching the types that should not be Base64 encoded.

Output encoding

API gateway will automatically gzip-encode the output of your API, so it's not necessary to gzip the output of your webapp.

If you use your own gzip encoding, it's likely to interfere with the Base64 output for text content types - this hasn't been tested.

Differences from eawsy

This implementation reuses a large portion of the event definitions from the eawsy AWS Lambda projects:

However, it wraps a web application in an apex-compatible adapter which makes direct calls to an http.Handler instance rather than creating a fake net.Conn and marshalling/unmarshalling the request data.

A ResponseWriter implementation captures the response of the handler and constructs an API Gateway Proxy response.

# Functions

Serve adaptes an http.Handler to the apex.Handler interface.
SetTextContentTypes configures the proxy package to skip Base64 encoding of the response body for responses with a Content-Type header matching one of the provided types.

# Variables

DefaultTextContentTypes specifies the content types that will not be Base64 encoded by default.

# Structs

Event represents an Amazon API Gateway Proxy Event.
Identity provides identity information about the API caller.
RequestContext provides contextual information about an Amazon API Gateway Proxy event.
Response defines parameters for a well formed response AWS Lambda should return to Amazon API Gateway.
ResponseWriter implements the http.ResponseWriter interface and collects the results of an HTTP request in an API Gateway proxy response object.