Documentation ¶
Index ¶
- func Bind(fn interface{}, render Renderer) http.HandlerFunc
- func Walk(r Routes, walkFn WalkFunc) error
- func WithContext(parent context.Context, ctx *Context) context.Context
- func WithRouteContext(parent context.Context, ctx *RouteContext) context.Context
- type ChainHandler
- type Context
- func (c *Context) Bind(r interface{}) error
- func (c *Context) ClientIP() string
- func (c *Context) ContentType() string
- func (c *Context) Context() context.Context
- func (c *Context) Cookie(name string) (string, bool)
- func (c *Context) Data(code int, contentType string, data []byte) error
- func (c *Context) File(filepath string)
- func (c *Context) FileAttachment(filepath, filename string)
- func (c *Context) FormParams() (url.Values, error)
- func (c *Context) Header(key string) (string, bool)
- func (c *Context) IndentedJSON(code int, obj interface{}) error
- func (c *Context) IndentedXML(code int, obj interface{}) error
- func (c *Context) IsWebsocket() bool
- func (c *Context) JSON(code int, obj interface{}) error
- func (c *Context) MultipartParams(maxMemory int64) (*multipart.Form, error)
- func (c *Context) PathParam(name string) (string, bool)
- func (c *Context) QueryParam(name string) (string, bool)
- func (c *Context) Redirect(code int, location string) error
- func (c *Context) RemoteIP() string
- func (c *Context) Render(code int, render render.Renderer) error
- func (c *Context) RequestBody() io.Reader
- func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
- func (c *Context) SetHeader(key, value string)
- func (c *Context) SetSameSite(samesite http.SameSite)
- func (c *Context) Status(code int)
- func (c *Context) String(code int, format string, args ...interface{}) error
- func (c *Context) XML(code int, obj interface{}) error
- type HttpError
- type MiddlewareFunc
- type Middlewares
- type Options
- type Renderer
- type RendererFunc
- type Route
- type RouteContext
- type RouteParams
- type Router
- type Routes
- type Server
- type WalkFunc
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Bind ¶
func Bind(fn interface{}, render Renderer) http.HandlerFunc
Bind convert fn to HandlerFunc.
func(ctx context.Context)
func(ctx context.Context) R
func(ctx context.Context) error
func(ctx context.Context, req T) R
func(ctx context.Context, req T) error
func(ctx context.Context, req T) (R, error)
func(writer http.ResponseWriter, request *http.Request)
func WithRouteContext ¶
func WithRouteContext(parent context.Context, ctx *RouteContext) context.Context
Types ¶
type ChainHandler ¶ added in v1.0.1
type ChainHandler struct { Endpoint http.Handler Middlewares Middlewares // contains filtered or unexported fields }
func (*ChainHandler) ServeHTTP ¶ added in v1.0.1
func (c *ChainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
func (*ChainHandler) Unwrap ¶ added in v1.0.1
func (c *ChainHandler) Unwrap() any
type Context ¶
type Context struct { // A ResponseWriter interface is used by an HTTP handler to // construct an HTTP response. Writer http.ResponseWriter // A Request represents an HTTP request received by a server // or to be sent by a client. Request *http.Request // contains filtered or unexported fields }
func FromContext ¶
func (*Context) Bind ¶
Bind checks the Method and Content-Type to select a binding engine automatically, Depending on the "Content-Type" header different bindings are used, for example:
"application/json" --> JSON binding "application/xml" --> XML binding
func (*Context) ClientIP ¶
ClientIP implements one best effort algorithm to return the real client IP. It calls c.RemoteIP() under the hood, to check if the remote IP is a trusted proxy or not. If it is it will then try to parse the headers defined in RemoteIPHeaders (defaulting to [X-Forwarded-For, X-Real-Ip]). If the headers are not syntactically valid OR the remote IP does not correspond to a trusted proxy, the remote IP (coming from Request.RemoteAddr) is returned.
func (*Context) ContentType ¶
ContentType returns the request header `Content-Type`.
func (*Context) FileAttachment ¶
FileAttachment writes the specified file into the body stream in an efficient way On the client side, the file will typically be downloaded with the given filename
func (*Context) FormParams ¶
FormParams returns the form in the request.
func (*Context) IndentedJSON ¶
IndentedJSON serializes the given struct as pretty JSON (indented + endlines) into the response body. It also sets the Content-Type as "application/json".
func (*Context) IndentedXML ¶
IndentedXML serializes the given struct as pretty XML (indented + endlines) into the response body. It also sets the Content-Type as "application/xml".
func (*Context) IsWebsocket ¶
IsWebsocket returns true if the request headers indicate that a websocket handshake is being initiated by the client.
func (*Context) JSON ¶
JSON serializes the given struct as JSON into the response body. It also sets the Content-Type as "application/json".
func (*Context) MultipartParams ¶
MultipartParams returns a request body as multipart/form-data. The whole request body is parsed and up to a total of maxMemory bytes of its file parts are stored in memory, with the remainder stored on disk in temporary files.
func (*Context) QueryParam ¶
QueryParam returns the named query in the request.
func (*Context) RemoteIP ¶
RemoteIP parses the IP from Request.RemoteAddr, normalizes and returns the IP (without the port).
func (*Context) RequestBody ¶
RequestBody returns the request body.
func (*Context) SetCookie ¶
func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
SetCookie adds a Set-Cookie header to the ResponseWriter's headers. The provided cookie must have a valid Name. Invalid cookies may be silently dropped.
func (*Context) SetHeader ¶
SetHeader is an intelligent shortcut for c.Writer.Header().Set(key, value). It writes a header in the response. If value == "", this method removes the header `c.Writer.Header().Del(key)`
func (*Context) SetSameSite ¶
SetSameSite with cookie
type MiddlewareFunc ¶
MiddlewareFunc is a function which receives an http.Handler and returns another http.Handler. Typically, the returned handler is a closure which does something with the http.ResponseWriter and http.Request passed to it, and then calls the handler passed as parameter to the MiddlewareFunc.
func Recovery ¶ added in v1.0.1
func Recovery() MiddlewareFunc
Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.
func RecoveryWith ¶ added in v1.0.1
func RecoveryWith(panicOut io.Writer) MiddlewareFunc
RecoveryWith returns a middleware for a given writer that recovers from any panics and writes a 500 if there was one.
type Middlewares ¶
type Middlewares []MiddlewareFunc
Middlewares type is a slice of standard middleware handlers with methods to compose middleware chains and http.Handler's.
func (Middlewares) Handler ¶
func (mws Middlewares) Handler(h http.Handler) http.Handler
Handler builds and returns a http.Handler from the chain of middlewares, with `h http.Handler` as the final handler.
func (Middlewares) HandlerFunc ¶
func (mws Middlewares) HandlerFunc(h http.HandlerFunc) http.Handler
HandlerFunc builds and returns a http.Handler from the chain of middlewares, with `h http.Handler` as the final handler.
type Options ¶
type Options struct { // Addr optionally specifies the TCP address for the server to listen on, // in the form "host:port". If empty, ":http" (port 8080) is used. // The service names are defined in RFC 6335 and assigned by IANA. // See net.Dial for details of the address format. Addr string `json:"addr" value:"${addr:=}"` // CertFile containing a certificate and matching private key for the // server must be provided if neither the Server's // TLSConfig.Certificates nor TLSConfig.GetCertificate are populated. // If the certificate is signed by a certificate authority, the // certFile should be the concatenation of the server's certificate, // any intermediates, and the CA's certificate. CertFile string `json:"cert-file" value:"${cert-file:=}"` // KeyFile containing a private key file. KeyFile string `json:"key-file" value:"${key-file:=}"` // ReadTimeout is the maximum duration for reading the entire // request, including the body. A zero or negative value means // there will be no timeout. // // Because ReadTimeout does not let Handlers make per-request // decisions on each request body's acceptable deadline or // upload rate, most users will prefer to use // ReadHeaderTimeout. It is valid to use them both. ReadTimeout time.Duration `json:"read-timeout" value:"${read-timeout:=0s}"` // ReadHeaderTimeout is the amount of time allowed to read // request headers. The connection's read deadline is reset // after reading the headers and the Handler can decide what // is considered too slow for the body. If ReadHeaderTimeout // is zero, the value of ReadTimeout is used. If both are // zero, there is no timeout. ReadHeaderTimeout time.Duration `json:"read-header-timeout" value:"${read-header-timeout:=0s}"` // WriteTimeout is the maximum duration before timing out // writes of the response. It is reset whenever a new // request's header is read. Like ReadTimeout, it does not // let Handlers make decisions on a per-request basis. // A zero or negative value means there will be no timeout. WriteTimeout time.Duration `json:"write-timeout" value:"${write-timeout:=0s}"` // IdleTimeout is the maximum amount of time to wait for the // next request when keep-alives are enabled. If IdleTimeout // is zero, the value of ReadTimeout is used. If both are // zero, there is no timeout. IdleTimeout time.Duration `json:"idle-timeout" value:"${idle-timeout:=0s}"` // MaxHeaderBytes controls the maximum number of bytes the // server will read parsing the request header's keys and // values, including the request line. It does not limit the // size of the request body. // If zero, DefaultMaxHeaderBytes is used. MaxHeaderBytes int `json:"max-header-bytes" value:"${max-header-bytes:=0}"` // Router optionally specifies an external router. Router Router `json:"-"` }
type RendererFunc ¶
func (RendererFunc) Render ¶
func (fn RendererFunc) Render(ctx *Context, err error, result interface{})
type RouteContext ¶
type RouteContext struct { Routes Routes // URLParams are the stack of routeParams captured during the // routing lifecycle across a stack of sub-routers. URLParams RouteParams // Routing path/method override used during the route search. RoutePath string RouteMethod string // The endpoint routing pattern that matched the request URI path // or `RoutePath` of the current sub-router. This value will update // during the lifecycle of a request passing through a stack of // sub-routers. RoutePattern string // contains filtered or unexported fields }
func FromRouteContext ¶
func FromRouteContext(ctx context.Context) *RouteContext
func (*RouteContext) AllowedMethods ¶ added in v1.0.1
func (c *RouteContext) AllowedMethods() (methods []string)
AllowedMethods report allowed http methods.
type RouteParams ¶
type RouteParams struct {
Keys, Values []string
}
RouteParams is a structure to track URL routing parameters efficiently.
func (*RouteParams) Add ¶
func (s *RouteParams) Add(key, value string)
Add will append a URL parameter to the end of the route param
type Router ¶
type Router interface { Routes http.Handler // Use appends a MiddlewareFunc to the chain. Use(mwf ...MiddlewareFunc) Router // Renderer to be used Response renderer in default. Renderer(renderer Renderer) Router // Group creates a new router group. Group(pattern string, fn ...func(r Router)) Router // Handle registers a new route with a matcher for the URL pattern. Handle(pattern string, handler http.Handler) // HandleFunc registers a new route with a matcher for the URL pattern. HandleFunc(pattern string, handler http.HandlerFunc) // Any registers a route that matches all the HTTP methods. // GET, POST, PUT, PATCH, HEAD, OPTIONS, DELETE, CONNECT, TRACE. Any(pattern string, handler interface{}) // Get registers a new GET route with a matcher for the URL path of the get method. Get(pattern string, handler interface{}) // Head registers a new HEAD route with a matcher for the URL path of the head method. Head(pattern string, handler interface{}) // Post registers a new POST route with a matcher for the URL path of the post method. Post(pattern string, handler interface{}) // Put registers a new PUT route with a matcher for the URL path of the put method. Put(pattern string, handler interface{}) // Patch registers a new PATCH route with a matcher for the URL path of the patch method. Patch(pattern string, handler interface{}) // Delete registers a new DELETE route with a matcher for the URL path of the delete method. Delete(pattern string, handler interface{}) // Connect registers a new CONNECT route with a matcher for the URL path of the connect method. Connect(pattern string, handler interface{}) // Options registers a new OPTIONS route with a matcher for the URL path of the options method. Options(pattern string, handler interface{}) // Trace registers a new TRACE route with a matcher for the URL path of the trace method. Trace(pattern string, handler interface{}) // NotFound to be used when no route matches. NotFound(handler http.HandlerFunc) // MethodNotAllowed to be used when the request method does not match the route. MethodNotAllowed(handler http.HandlerFunc) }
Router registers routes to be matched and dispatches a handler.
Registers a new route with a matcher for the URL pattern. Automatic binding request to handler input params and validate params.
Router.Any() Router.Get() Router.Head() Router.Post() Router.Put() Router.Patch() Router.Delete() Router.Connect() Router.Options() Router.Trace()
The handler accepts the following functional signatures:
func(ctx context.Context)
func(ctx context.Context) R
func(ctx context.Context) error
func(ctx context.Context, req T) R
func(ctx context.Context, req T) error
func(ctx context.Context, req T) (R, error)
It implements the http.Handler interface, so it can be registered to serve requests:
func main() { var router = web.NewRouter() router.Get("/greeting", func(ctx context.Context) string { return "greeting!!!" }) http.ListenAndServe(":8080", router) }
type Routes ¶
type Routes interface { // Routes returns the routing tree in an easily traversable structure. Routes() []Route // Middlewares returns the list of middlewares in use by the router. Middlewares() Middlewares // Match searches the routing tree for a handler that matches // the method/path - similar to routing a http request, but without // executing the handler thereafter. Match(ctx *RouteContext, method, path string) bool }
type Server ¶
type Server struct { Router // contains filtered or unexported fields }
A Server defines parameters for running an HTTP server.
func (*Server) Run ¶
Run listens on the TCP network address Addr and then calls Serve to handle requests on incoming connections. Accepted connections are configured to enable TCP keep-alives.
func (*Server) Shutdown ¶
Shutdown gracefully shuts down the server without interrupting any active connections. Shutdown works by first closing all open listeners, then closing all idle connections, and then waiting indefinitely for connections to return to idle and then shut down. If the provided context expires before the shutdown is complete, Shutdown returns the context's error, otherwise it returns any error returned from closing the Server's underlying Listener(s).