Documentation ¶
Overview ¶
Package web implement a lightweight HTTP server.
Index ¶
- Constants
- Variables
- type Binder
- type ContentDisposition
- type Context
- type Entry
- type Error
- type ErrorHandler
- type ErrorHandlerFunc
- type Filter
- type FilterFunc
- type Group
- func (g *Group) Any(path string, handler HandlerFunc, opts ...HandlerOption)
- func (g *Group) Connect(path string, h HandlerFunc, opts ...HandlerOption)
- func (g *Group) Delete(path string, h HandlerFunc, opts ...HandlerOption)
- func (g *Group) File(path string, fs http.FileSystem, name string, filters ...Filter)
- func (g *Group) Get(path string, h HandlerFunc, opts ...HandlerOption)
- func (g *Group) Group(prefix string, filters ...Filter) *Group
- func (g *Group) Handle(path string, controller interface{}, filters ...Filter)
- func (g *Group) Head(path string, h HandlerFunc, opts ...HandlerOption)
- func (g *Group) Match(methods []string, path string, handler HandlerFunc, opts ...HandlerOption)
- func (g *Group) Options(path string, h HandlerFunc, opts ...HandlerOption)
- func (g *Group) Patch(path string, h HandlerFunc, opts ...HandlerOption)
- func (g *Group) Post(path string, h HandlerFunc, opts ...HandlerOption)
- func (g *Group) Put(path string, h HandlerFunc, opts ...HandlerOption)
- func (g *Group) Static(prefix string, fs http.FileSystem, fallback string, filters ...Filter)
- func (g *Group) Trace(path string, h HandlerFunc, opts ...HandlerOption)
- func (g *Group) Use(filters ...Filter)
- func (g *Group) UseFunc(filters ...FilterFunc)
- type HandlerFunc
- type HandlerInfo
- type HandlerOption
- type Options
- type Renderer
- type Requester
- type ResponseWriter
- type Responser
- type Router
- type Server
- func (s *Server) AcquireContext(w http.ResponseWriter, r *http.Request) Context
- func (s *Server) Any(path string, handler HandlerFunc, opts ...HandlerOption)
- func (s *Server) Close(timeout time.Duration)
- func (s *Server) Connect(path string, h HandlerFunc, opts ...HandlerOption)
- func (s *Server) Delete(path string, h HandlerFunc, opts ...HandlerOption)
- func (s *Server) File(path string, fs http.FileSystem, name string, filters ...Filter)
- func (s *Server) Get(path string, h HandlerFunc, opts ...HandlerOption)
- func (s *Server) Group(prefix string, filters ...Filter) (g *Group)
- func (s *Server) Handle(path string, controller interface{}, filters ...Filter)
- func (s *Server) Handler(name string) (handler HandlerInfo)
- func (s *Server) Head(path string, h HandlerFunc, opts ...HandlerOption)
- func (s *Server) Match(methods []string, path string, handler HandlerFunc, opts ...HandlerOption)
- func (s *Server) Options(path string, h HandlerFunc, opts ...HandlerOption)
- func (s *Server) Patch(path string, h HandlerFunc, opts ...HandlerOption)
- func (s *Server) Post(path string, h HandlerFunc, opts ...HandlerOption)
- func (s *Server) Put(path string, h HandlerFunc, opts ...HandlerOption)
- func (s *Server) ReleaseContext(c Context)
- func (s *Server) Router() *router.Tree
- func (s *Server) Serve() error
- func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)
- func (s *Server) Static(prefix string, sys http.FileSystem, fallback string, filters ...Filter)
- func (s *Server) Trace(path string, h HandlerFunc, opts ...HandlerOption)
- func (s *Server) URL(name string, params ...interface{}) string
- func (s *Server) Use(filters ...Filter)
- func (s *Server) UseFunc(filters ...FilterFunc)
- type Unmarshaler
- type User
- type Validator
Constants ¶
const ( AuthAnonymous = "*" // everyone AuthAuthenticated = "?" // logged-in users AuthAdministrator = "!" // administrators )
const ( MIMEApplicationJSON = "application/json" MIMEApplicationJSONCharsetUTF8 = MIMEApplicationJSON + "; " + charsetUTF8 MIMEApplicationJavaScript = "application/javascript" MIMEApplicationJavaScriptCharsetUTF8 = MIMEApplicationJavaScript + "; " + charsetUTF8 MIMEApplicationXML = "application/xml" MIMEApplicationXMLCharsetUTF8 = MIMEApplicationXML + "; " + charsetUTF8 MIMEApplicationForm = "application/x-www-form-urlencoded" MIMETextHTML = "text/html" MIMETextHTMLCharsetUTF8 = MIMETextHTML + "; " + charsetUTF8 MIMETextPlain = "text/plain" MIMETextPlainCharsetUTF8 = MIMETextPlain + "; " + charsetUTF8 MIMEMultipartForm = "multipart/form-data" MIMEOctetStream = "application/octet-stream" )
MIME types
const ( HeaderAcceptEncoding = "Accept-Encoding" HeaderAcceptLanguage = "Accept-Language" HeaderAllow = "Allow" HeaderAuthorization = "Authorization" HeaderContentDisposition = "Content-Disposition" HeaderContentEncoding = "Content-Encoding" HeaderContentLength = "Content-Length" HeaderContentType = "Content-Type" HeaderCookie = "Cookie" HeaderSetCookie = "Set-Cookie" HeaderIfModifiedSince = "If-Modified-Since" HeaderLastModified = "Last-Modified" HeaderLocation = "Location" HeaderUpgrade = "Upgrade" HeaderVary = "Vary" HeaderWWWAuthenticate = "WWW-Authenticate" HeaderXForwardedProto = "X-Forwarded-Proto" HeaderXHTTPMethodOverride = "X-HTTP-Method-Override" HeaderXForwardedFor = "X-Forwarded-For" HeaderXRealIP = "X-Real-IP" HeaderXRequestedWith = "X-Requested-With" HeaderServer = "Server" HeaderOrigin = "Origin" HeaderExpires = "Expires" HeaderCacheControl = "Cache-Control" HeaderAccessControlRequestMethod = "Access-Control-Request-Method" HeaderAccessControlRequestHeaders = "Access-Control-Request-Headers" HeaderAccessControlAllowOrigin = "Access-Control-Allow-Origin" HeaderAccessControlAllowMethods = "Access-Control-Allow-Methods" HeaderAccessControlAllowHeaders = "Access-Control-Allow-Headers" HeaderAccessControlAllowCredentials = "Access-Control-Allow-Credentials" HeaderAccessControlExposeHeaders = "Access-Control-Expose-Headers" HeaderAccessControlMaxAge = "Access-Control-Max-Age" HeaderStrictTransportSecurity = "Strict-Transport-Security" HeaderXContentTypeOptions = "X-Content-Type-Options" HeaderXXSSProtection = "X-XSS-Protection" HeaderXFrameOptions = "X-Frame-Options" HeaderContentSecurityPolicy = "Content-Security-Policy" HeaderXCSRFToken = "X-CSRF-Token" )
Headers
const ( DispositionAttachment = "attachment" DispositionInline = "inline" )
const PkgName = "auxo.net.web"
Variables ¶
var ( ErrForbidden = NewError(http.StatusForbidden) ErrNotFound = NewError(http.StatusNotFound) ErrMethodNotAllowed = NewError(http.StatusMethodNotAllowed) ErrUnsupportedMediaType = NewError(http.StatusUnsupportedMediaType) ErrInternalServerError = NewError(http.StatusInternalServerError) ErrRendererNotRegistered = errors.New("Renderer not registered") ErrBinderNotRegistered = errors.New("Binder not registered") ErrValidatorNotRegistered = errors.New("Validator not registered") ErrInvalidRedirectCode = errors.New("Invalid redirect status code") )
Errors
Functions ¶
This section is empty.
Types ¶
type Binder ¶
type Binder interface { // Bind takes data out of the request and decodes into a struct according // to the Content-Type of the request. Bind(ctx Context, i interface{}) (err error) }
Binder is the interface that can unmarshal request data to struct.
type ContentDisposition ¶
type Context ¶
type Context interface { // Reset resets the context after request completes. It must be called along // with `Server#AcquireContext()` and `Server#ReleaseContext()`. // See `Server#ServeHTTP()` Reset(r *http.Request, w http.ResponseWriter) // Server returns the `Server` instance. Server() *Server // Logger returns the `Logger` instance. Logger() log.Logger // User returns info of current visitor. User() User // SetUser set user info of current visitor. Generally used by authentication filter. SetUser(user User) // Get retrieves data from the context. Get(key string) interface{} // Set saves data in the context. Set(key string, value interface{}) // Bind binds the request body into `i`. // Validator must be registered using `Server#Validator` if validate arg is true. Bind(i interface{}, validate ...bool) error // Route returns the registered route path for current handler. Route() string // Handler returns the matched handler info by router. Handler() HandlerInfo // Error invokes the registered HTTP error handler. Generally used by filters. Error(err error) Requester Responser }
Context represents the context of the current HTTP request.
type Entry ¶
type Entry struct { Address string // http://:8001,https://auxo.net:443,unix:///a/b TLS *struct { Cert string Key string ACME *struct { //Server string // default: https://acme-staging.api.letsencrypt.org/directory Domain string Email string CacheDir string } } }
Entry represents an entry-point for listening.
type Error ¶
type Error errors.CodedError
Error represents an HTTP error occurred while handling a request.
type ErrorHandler ¶
type ErrorHandler struct { Detail bool Default ErrorHandlerFunc // contains filtered or unexported fields }
func (*ErrorHandler) OnCode ¶
func (h *ErrorHandler) OnCode(code int, fn ErrorHandlerFunc)
func (*ErrorHandler) OnError ¶
func (h *ErrorHandler) OnError(t reflect.Type, fn ErrorHandlerFunc)
func (*ErrorHandler) OnType ¶
func (h *ErrorHandler) OnType(ct string, fn ErrorHandlerFunc)
type ErrorHandlerFunc ¶
type Filter ¶
type Filter interface {
Apply(HandlerFunc) HandlerFunc
}
Filter defines a filter interface.
type FilterFunc ¶
type FilterFunc func(HandlerFunc) HandlerFunc
FilterFunc defines a filter function type.
func (FilterFunc) Apply ¶
func (f FilterFunc) Apply(h HandlerFunc) HandlerFunc
type Group ¶
type Group struct {
// contains filtered or unexported fields
}
Group is a set of sub-routes which is associated with a prefix and shares filters.
func (*Group) Any ¶
func (g *Group) Any(path string, handler HandlerFunc, opts ...HandlerOption)
Any registers a route that matches all the HTTP methods.
func (*Group) Connect ¶
func (g *Group) Connect(path string, h HandlerFunc, opts ...HandlerOption)
Connect registers a route that matches 'CONNECT' method.
func (*Group) Delete ¶
func (g *Group) Delete(path string, h HandlerFunc, opts ...HandlerOption)
Delete registers a route that matches 'DELETE' method.
func (*Group) File ¶
File registers a route in order to server a single file of the local filesystem.
func (*Group) Get ¶
func (g *Group) Get(path string, h HandlerFunc, opts ...HandlerOption)
Get registers a route that matches 'GET' method.
func (*Group) Handle ¶
Handle registers routes from controller. It panics if controller's Kind is not Struct.
func (*Group) Head ¶
func (g *Group) Head(path string, h HandlerFunc, opts ...HandlerOption)
Head registers a route that matches 'HEAD' method.
func (*Group) Match ¶
func (g *Group) Match(methods []string, path string, handler HandlerFunc, opts ...HandlerOption)
Match registers a route that matches specific methods.
func (*Group) Options ¶
func (g *Group) Options(path string, h HandlerFunc, opts ...HandlerOption)
Options registers a route that matches 'OPTIONS' method.
func (*Group) Patch ¶
func (g *Group) Patch(path string, h HandlerFunc, opts ...HandlerOption)
Patch registers a route that matches 'PATCH' method.
func (*Group) Post ¶
func (g *Group) Post(path string, h HandlerFunc, opts ...HandlerOption)
Post registers a route that matches 'POST' method.
func (*Group) Put ¶
func (g *Group) Put(path string, h HandlerFunc, opts ...HandlerOption)
Put registers a route that matches 'PUT' method.
func (*Group) Trace ¶
func (g *Group) Trace(path string, h HandlerFunc, opts ...HandlerOption)
Trace registers a route that matches 'TRACE' method.
func (*Group) UseFunc ¶
func (g *Group) UseFunc(filters ...FilterFunc)
UseFunc adds filters to the router.
type HandlerFunc ¶
HandlerFunc defines a function to server HTTP requests.
func WrapError ¶
func WrapError(err *Error) HandlerFunc
WrapError wraps an `Error` into `web.HandlerFunc`.
func WrapFile ¶
func WrapFile(fs http.FileSystem, name string) HandlerFunc
func WrapFileSystem ¶
func WrapFileSystem(sys http.FileSystem, fallback string) HandlerFunc
func WrapHandler ¶
func WrapHandler(h http.Handler) HandlerFunc
WrapHandler wraps `http.Handler` into `web.HandlerFunc`.
func (HandlerFunc) Chain ¶
func (h HandlerFunc) Chain(filters ...Filter) HandlerFunc
type HandlerInfo ¶
type HandlerInfo interface { Action() HandlerFunc Name() string Authorize() string Option(name string) string }
HandlerInfo is the interface for handler info.
type HandlerOption ¶
type HandlerOption func(*handlerInfo)
func WithAuthorize ¶
func WithAuthorize(authorize string) HandlerOption
func WithFilter ¶
func WithFilter(filters ...Filter) HandlerOption
func WithFilterFunc ¶
func WithFilterFunc(filters ...FilterFunc) HandlerOption
func WithName ¶
func WithName(name string) HandlerOption
func WithOption ¶
func WithOption(name, value string) HandlerOption
type Options ¶
type Options struct { // Name is used as HTTP `Server` header, default is auxo/[auxo.Version] Name string Mode string // develop/release Entries []Entry RedirectTrailingSlash bool MethodNotAllowed bool ReadTimeout time.Duration ReadHeaderTimeout time.Duration WriteTimeout time.Duration IdleTimeout time.Duration MaxHeaderSize size.Size MaxBodySize size.Size Authorize string // default authorize IndexPages []string // static index pages, default: index.html }
Options represents the options of Server.
type Requester ¶
type Requester interface { // Request returns `*http.Request`. Request() *http.Request // SetRequest replace default `*http.Request`. SetRequest(r *http.Request) // IsTLS returns true if HTTP connection is TLS otherwise false. IsTLS() bool // Scheme returns the HTTP protocol scheme, `http` or `https`. Scheme() string // RealIP returns the client's network address based on `X-Forwarded-For` // or `X-Real-IP` request header. RealIP() string // IsAJAX returns true if this request is an AJAX request(XMLHttpRequest) IsAJAX() bool // Path returns path parameter by name. Path(name string) string // P returns path parameter by name, it's an alias of Path method. P(name string) string // PathNames returns path parameter names. PathNames() []string // SetPathNames sets path parameter names. SetPathNames(names ...string) // PathValues returns path parameter values. PathValues() []string // SetPathValues sets path parameter values. SetPathValues(values ...string) // Query returns the query param for the provided name. Query(name string) string // Q returns the query param for the provided name, it's an alias of Query method. Q(name string) string // QueryValues returns the query parameters as `url.Values`. QueryValues() url.Values // Form returns the form field value for the provided name. Form(name string) string // F returns the form field value for the provided name, it's an alias of Form method. F(name string) string // FormValues returns the form parameters as `url.Values`. FormValues() (url.Values, error) // File returns the multipart form file for the provided name. File(name string) (multipart.File, *multipart.FileHeader, error) // MultipartForm returns the multipart form. MultipartForm() (*multipart.Form, error) // Cookie returns the named cookie provided in the request. Cookie(name string) (*http.Cookie, error) // Header returns request's header by name. Header(name string) string // ContentType returns the 'Content-Type' header of request. Charset is omited. ContentType() string }
Requester holds all methods for reading request.
type ResponseWriter ¶
type ResponseWriter interface { http.ResponseWriter http.Flusher http.Hijacker http.Pusher WriteString(s string) (n int, err error) Committed() bool Size() int Status() int }
ResponseWriter wraps an http.ResponseWriter and implements its interface to be used by an HTTP handler to construct an HTTP response.
type Responser ¶
type Responser interface { // Response returns `ResponseWriter`. Response() ResponseWriter // Status set status code of response. Status(code int) Responser // SetCookie adds a `Set-Cookie` header in HTTP response. SetCookie(cookie *http.Cookie) Responser // SetHeader writes given key and value to the response's header. SetHeader(key, value string) Responser // SetContentType sets the 'Content-Type' header of response. SetContentType(ct string) Responser // Render renders a template with data and sends a text/html response. // Renderer must be registered using `Server.Renderer`. Render(name string, data interface{}) error // HTML sends an text/html response. HTML(html string) error // JSON sends a JSON response. JSON(i interface{}, indent ...string) error // JSONP sends a JSONP response. It uses `callback` to construct the JSONP payload. JSONP(callback string, i interface{}) error Result(code int32, info string, data interface{}) error // XML sends an XML response. XML(i interface{}, indent ...string) error // Text sends string as plain text. Text(s string) error // Data sends byte array to response. // You can use `Context.SetContentType` to set content type. Data(b []byte, cd ...ContentDisposition) error // Stream sends a streaming response. // You can use `Context.SetContentType` to set content type. Stream(r io.Reader, cd ...ContentDisposition) error // Content sends a response with the content of the file. Content(file string, cd ...ContentDisposition) error // Empty sends a response with no body. // You can use `Context.Status` to change status code (default is 200). Empty() error // Redirect redirects the request to a provided URL with status code. // You can use `Context.Status` to change status code. // If code wasn't set, default is 302 (http.StatusFound). Redirect(url string) error }
Responser holds all methods for sending response.
type Router ¶
type Router interface { Group(prefix string, filters ...Filter) *Group Use(filters ...Filter) Get(path string, h HandlerFunc, opts ...HandlerOption) Post(path string, h HandlerFunc, opts ...HandlerOption) Delete(path string, h HandlerFunc, opts ...HandlerOption) Put(path string, h HandlerFunc, opts ...HandlerOption) Head(path string, h HandlerFunc, opts ...HandlerOption) Options(path string, h HandlerFunc, opts ...HandlerOption) Patch(path string, h HandlerFunc, opts ...HandlerOption) Trace(path string, h HandlerFunc, opts ...HandlerOption) Connect(path string, h HandlerFunc, opts ...HandlerOption) Any(path string, handler HandlerFunc, opts ...HandlerOption) Match(methods []string, path string, h HandlerFunc, opts ...HandlerOption) Handle(path string, controller interface{}, filters ...Filter) Static(prefix string, fs http.FileSystem, fallback string, filters ...Filter) File(path string, fs http.FileSystem, name string, filters ...Filter) }
type Server ¶
type Server struct { ErrorHandler ErrorHandler Binder Binder Validator Validator Renderer Renderer Logger log.Logger // contains filtered or unexported fields }
Server represents information of the HTTP server.
func Auto ¶
func Auto() (server *Server)
Auto creates an instance of Server with options loaded from app.yaml/app.toml.
func (*Server) AcquireContext ¶
AcquireContext returns an `Context` instance from the pool. You must return the context by calling `ReleaseContext()`.
func (*Server) Any ¶
func (s *Server) Any(path string, handler HandlerFunc, opts ...HandlerOption)
Any registers a route that matches all the HTTP methods.
func (*Server) Connect ¶
func (s *Server) Connect(path string, h HandlerFunc, opts ...HandlerOption)
Connect registers a route that matches 'CONNECT' method.
func (*Server) Delete ¶
func (s *Server) Delete(path string, h HandlerFunc, opts ...HandlerOption)
Delete registers a route that matches 'DELETE' method.
func (*Server) Get ¶
func (s *Server) Get(path string, h HandlerFunc, opts ...HandlerOption)
Get registers a route that matches 'GET' method.
func (*Server) Handle ¶
Handle registers routes from controller. It panics if controller's Kind is not struct.
func (*Server) Handler ¶
func (s *Server) Handler(name string) (handler HandlerInfo)
func (*Server) Head ¶
func (s *Server) Head(path string, h HandlerFunc, opts ...HandlerOption)
Head registers a route that matches 'HEAD' method.
func (*Server) Match ¶
func (s *Server) Match(methods []string, path string, handler HandlerFunc, opts ...HandlerOption)
Match registers a route that matches specific methods.
func (*Server) Options ¶
func (s *Server) Options(path string, h HandlerFunc, opts ...HandlerOption)
Options registers a route that matches 'OPTIONS' method.
func (*Server) Patch ¶
func (s *Server) Patch(path string, h HandlerFunc, opts ...HandlerOption)
Patch registers a route that matches 'PATCH' method.
func (*Server) Post ¶
func (s *Server) Post(path string, h HandlerFunc, opts ...HandlerOption)
Post registers a route that matches 'POST' method.
func (*Server) Put ¶
func (s *Server) Put(path string, h HandlerFunc, opts ...HandlerOption)
Put registers a route that matches 'PUT' method.
func (*Server) ReleaseContext ¶
ReleaseContext returns the `Context` instance back to the pool.
func (*Server) ServeHTTP ¶
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP implements `http.Handler` interface, which serves HTTP requests.
func (*Server) Trace ¶
func (s *Server) Trace(path string, h HandlerFunc, opts ...HandlerOption)
Trace registers a route that matches 'TRACE' method.
func (*Server) UseFunc ¶
func (s *Server) UseFunc(filters ...FilterFunc)
UseFunc adds global filters to the router.
type Unmarshaler ¶
type Unmarshaler interface { // Unmarshal converts a param value to type. Unmarshal(param interface{}) error }
Unmarshaler is the interface implemented by types that can unmarshal a param to themselves.