Documentation ¶
Overview ¶
The web package is a lightweight framework for building web applications. It has a multiplexer, a mechanism for connecting middleware, and its own context management. The main goal of web is to get as far away from the developer as possible, i.e. it doesn't force you to build your application according to any particular template, but just helps you make all the trivial things faster and easier. e.g. 1. Getting named URI parameters. 2. Multiplexer for regex-matching URIs and the like. 3. Implementation of special application-level configurations or any similar objects into the request context as required.
Index ¶
- Constants
- func GetError(r *http.Request) error
- func GlobalLoggerConfig(stdout io.Writer, stderr io.Writer, cfgs ...logCfg)
- func OriginalResponseWriter(rw http.ResponseWriter) http.ResponseWriter
- func R200(w http.ResponseWriter, data interface{})
- func R201(w http.ResponseWriter, data interface{})
- func R204(w http.ResponseWriter)
- func R302(w http.ResponseWriter, data interface{})
- func R400(w http.ResponseWriter, data interface{})
- func R403(w http.ResponseWriter, data interface{})
- func R404(w http.ResponseWriter, data interface{})
- func R406(w http.ResponseWriter, data interface{})
- func R451(w http.ResponseWriter, data interface{})
- func R500(w http.ResponseWriter, data interface{})
- func Render(w http.ResponseWriter, data interface{}, rCode int, tpl *template.Template)
- func ResponseStatus(rw http.ResponseWriter) int
- func Send(w http.ResponseWriter, contentType string, data interface{}, rCode int)
- func SendError(w http.ResponseWriter, data interface{}, rCode int)
- func SendHeader(w http.ResponseWriter, rCode int)
- func SendResponse(w http.ResponseWriter, data interface{}, rCode int)
- func SetError(r *http.Request, err error)
- type Config
- type ContextPayload
- type ErrorData
- type Logger
- type Middleware
- type Route
- type RouteGroup
- type Router
- func (rtr *Router) Add(routes ...*Route)
- func (rtr *Router) ServeHTTP(rw http.ResponseWriter, r *http.Request)
- func (router *Router) SetupMiddleware()
- func (router *Router) Shutdown() error
- func (router *Router) ShutdownHTTPS() error
- func (router *Router) Start()
- func (router *Router) StartHTTPS()
- func (rtr *Router) Use(mm ...Middleware)
- func (rtr *Router) UseOnSpecialHandlers(mm ...Middleware)
Constants ¶
const ( // LogCfgDisableDebug is used to disable debug logs LogCfgDisableDebug = logCfg("disable-debug") // LogCfgDisableInfo is used to disable info logs LogCfgDisableInfo = logCfg("disable-info") // LogCfgDisableWarn is used to disable warning logs LogCfgDisableWarn = logCfg("disable-warn") // LogCfgDisableError is used to disable error logs LogCfgDisableError = logCfg("disable-err") // LogCfgDisableFatal is used to disable fatal logs LogCfgDisableFatal = logCfg("disable-fatal") )
const ( // HeaderContentType is a key to refer to the content type of the response header HeaderContentType = "Content-Type" // JSONContentType is the MIME type when the response is JSON JSONContentType = "application/json" // HTMLContentType is the MIME type when the response is HTML HTMLContentType = "text/html; charset=UTF-8" // ErrInternalServer to send when an internal server error ErrInternalServer = "Internal server error" )
Variables ¶
This section is empty.
Functions ¶
func GlobalLoggerConfig ¶
GlobalLoggerConfig is used to configure the global/default web logger. IMPORTANT: It is not safe for simultaneous operation.
func OriginalResponseWriter ¶
func OriginalResponseWriter(rw http.ResponseWriter) http.ResponseWriter
OriginalResponseWriter returns the Go response record stored in the custom web response record.
func R400 ¶
func R400(w http.ResponseWriter, data interface{})
R400 - Invalid request, any incorrect/erraneous value in the request body
func R406 ¶
func R406(w http.ResponseWriter, data interface{})
R406 - Unacceptable header. For any error related to values set in header
func R451 ¶
func R451(w http.ResponseWriter, data interface{})
R451 - Resource taken down because of a legal request
func Render ¶
func Render(w http.ResponseWriter, data interface{}, rCode int, tpl *template.Template)
Render is used for rendering templates (HTML)
func ResponseStatus ¶
func ResponseStatus(rw http.ResponseWriter) int
ResponseStatus returns the response status code. This only works if http.ResponseWriter is not wrapped in another response writer before calling ResponseStatus.
func Send ¶
func Send(w http.ResponseWriter, contentType string, data interface{}, rCode int)
Send sends a completely custom response without wrapping it in `{data: <data>, status: <int>` struct
func SendError ¶
func SendError(w http.ResponseWriter, data interface{}, rCode int)
SendError is used to respond to any request with an error
func SendHeader ¶
func SendHeader(w http.ResponseWriter, rCode int)
SendHeader is used to send only a response header, i.e no response body
func SendResponse ¶
func SendResponse(w http.ResponseWriter, data interface{}, rCode int)
SendResponse is used to respond to any request (JSON response) based on the code, data etc.
Types ¶
type Config ¶
type Config struct { // Host is the host on which the server is listening Host string `json:"host,omitempty"` // Port is the port number on which the server should listen to HTTP requests Port string `json:"port,omitempty"` // CertFile is the path to TLS/SSL certificate file required for HTTPS CertFile string `json:"certFile,omitempty"` // KeyFile is the path to the certificate private key file KeyFile string `json:"keyFile,omitempty"` // HTTPSPort is the port number on which the server should listen to HTTP requests HTTPSPort string `json:"httpsPort,omitempty"` // ReadTimeout is the maximum length of time for which the server will read the request ReadTimeout time.Duration `json:"readTimeout,omitempty"` // WriteTimeout is the maximum time for which the server will try to respond to the request WriteTimeout time.Duration `json:"writeTimeout,omitempty"` // InsecureSkipVerify is the HTTP certificate verification InsecureSkipVerify bool `json:"insecureSkipVerify,omitempty"` // ShutdownTimeout is the duration during which the preferential shutdown will be completed ShutdownTimeout time.Duration // ReverseMiddleware, if true, // will change the execution order of the middleware from the order it was added. // e.g. router.Use(m1,m2), m2 will be executed first if ReverseMiddleware is true ReverseMiddleware bool }
Config is used to read the application configuration from a json file
type ContextPayload ¶
ContextPayload is a WebContext. A new ContextPayload instance is injected inside the context object of each request.
func Context ¶
func Context(r *http.Request) *ContextPayload
Context returns the ContextPayload injected inside the HTTP request context.
func (*ContextPayload) Error ¶
func (cp *ContextPayload) Error() error
Error returns the error set within the context.
func (*ContextPayload) Params ¶
func (cp *ContextPayload) Params() map[string]string
Params returns the URI parameters of the corresponding route.
func (*ContextPayload) SetError ¶
func (cp *ContextPayload) SetError(err error)
SetError sets the value of err in context.
type Logger ¶
type Logger interface { Debug(data ...interface{}) Info(data ...interface{}) Warn(data ...interface{}) Error(data ...interface{}) Fatal(data ...interface{}) }
Logger defines all the logging methods to be implemented
type Middleware ¶
type Middleware func(http.ResponseWriter, *http.Request, http.HandlerFunc)
Middleware is the signature of Web's middleware
type Route ¶
type Route struct { // Name is unique identifier for the route Name string // Method is the HTTP request method/type Method string // Pattern is the URI pattern to match Pattern string // TrailingSlash if set to true, the URI will be matched with or without // a trailing slash. IMPORTANT: It does not redirect. TrailingSlash bool // FallThroughPostResponse if enabled will execute all the handlers even if a response was already sent to the client FallThroughPostResponse bool // Handlers is a slice of http.HandlerFunc which can be middlewares or anything else. Though only 1 of them will be allowed to respond to client. // subsequent writes from the following handlers will be ignored Handlers []http.HandlerFunc // contains filtered or unexported fields }
Route defines a route for each API
type RouteGroup ¶
type RouteGroup struct { // PathPrefix is the URI prefix for all routes in this group PathPrefix string // contains filtered or unexported fields }
func NewRouteGroup ¶
func NewRouteGroup(pathPrefix string, skipRouterMiddleware bool, rr ...Route) *RouteGroup
func (*RouteGroup) Add ¶
func (rg *RouteGroup) Add(rr ...Route)
func (*RouteGroup) Routes ¶
func (rg *RouteGroup) Routes() []*Route
func (*RouteGroup) Use ¶
func (rg *RouteGroup) Use(mm ...Middleware)
type Router ¶
type Router struct { // NotFound is the generic handler for 404 resource not found response NotFound http.HandlerFunc // NotImplemented is the generic handler for 501 method not implemented NotImplemented http.HandlerFunc // contains filtered or unexported fields }
Router is the HTTP router
func NewRouter ¶
NewRouter initializes & returns a new router instance with all the configurations and routes set
func (*Router) Add ¶
Add is a convenience method used to add a new route to an already initialized router Important: `.Use` should be used only after all routes are added
func (*Router) SetupMiddleware ¶
func (router *Router) SetupMiddleware()
SetupMiddleware initializes all middleware added with "Use". This function does not need to be called explicitly if router.Start() or router.StartHTTPS() is used. Instead, if the router is passed to an external server, the SetupMiddleware function should be called.
func (*Router) ShutdownHTTPS ¶
ShutdownHTTPS gracefully shuts down HTTPS server
func (*Router) Start ¶
func (router *Router) Start()
Start starts the HTTP server with the appropriate configurations
func (*Router) StartHTTPS ¶
func (router *Router) StartHTTPS()
StartHTTPS starts the server with HTTPS enabled
func (*Router) UseOnSpecialHandlers ¶
func (rtr *Router) UseOnSpecialHandlers(mm ...Middleware)
UseOnSpecialHandlers adds middleware to 2 special web handlers
Directories ¶
Path | Synopsis |
---|---|
extensions
|
|
sse
The sse package implements Server-Sent Events (SSE).
|
The sse package implements Server-Sent Events (SSE). |
middleware
|
|
accesslog
The accesslogs package provides a simple middleware for access logs.
|
The accesslogs package provides a simple middleware for access logs. |
cors
The cors package sets the appropriate CORS (https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) response headers and allows for customization.
|
The cors package sets the appropriate CORS (https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) response headers and allows for customization. |