httpx

package module
v0.7.12 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 19, 2025 License: GPL-3.0 Imports: 15 Imported by: 0

README

httpx

Golang HTTP router for based on standard http module but with more features

Documentation

Index

Constants

View Source
const TraceIDHeader = "X-Trace-Id"

Variables

This section is empty.

Functions

func DeclareHandler added in v0.7.0

func DeclareHandler(r *Router, method, pattern string, handler Handler, middlewares ...Middleware)

Patterns can match the method, host and path of a request. Some examples:

"/index.html" matches the path "/index.html" for any host and method.
"GET /static/" matches a GET request whose path begins with "/static/".
"example.com/" matches any request to the host "example.com".
"example.com/{$}" matches requests with host "example.com" and path "/".
"/b/{bucket}/o/{objectname...}" matches paths whose first segment is "b" and whose third segment is "o".

func NewTraceID added in v0.7.0

func NewTraceID(r *http.Request) string

Types

type Context added in v0.7.0

type Context struct {
	// contains filtered or unexported fields
}

func NewContext added in v0.7.0

func NewContext(parent *slog.Logger, pattern string, w http.ResponseWriter, req *http.Request) *Context

func (*Context) AccessDenied added in v0.7.2

func (ctx *Context) AccessDenied() error

func (*Context) BadRequest added in v0.7.4

func (ctx *Context) BadRequest(msg string, args ...any) error

func (*Context) CacheDisable added in v0.7.2

func (ctx *Context) CacheDisable()

func (*Context) CacheEnable added in v0.7.2

func (ctx *Context) CacheEnable(public bool, maxAge time.Duration)

func (*Context) ClientContext added in v0.7.0

func (ctx *Context) ClientContext() context.Context

func (*Context) FormParam added in v0.7.3

func (ctx *Context) FormParam(name string) string

func (*Context) GetRequestHeader added in v0.7.0

func (ctx *Context) GetRequestHeader(name string) string

func (*Context) HeadersSent added in v0.7.0

func (ctx *Context) HeadersSent() bool

func (*Context) Logger added in v0.7.0

func (ctx *Context) Logger() *slog.Logger

func (*Context) Method added in v0.7.0

func (ctx *Context) Method() string

func (*Context) ParseRequestJSON added in v0.7.0

func (ctx *Context) ParseRequestJSON(dest any) error

func (*Context) Path added in v0.7.0

func (ctx *Context) Path() string

func (*Context) PathParam added in v0.7.0

func (ctx *Context) PathParam(name string) string

func (*Context) Redirect added in v0.7.0

func (ctx *Context) Redirect(statusCode int, url string) error

func (*Context) Request added in v0.7.0

func (ctx *Context) Request() *http.Request

func (*Context) RespondJSON added in v0.7.0

func (ctx *Context) RespondJSON(statusCode int, obj any) error

func (*Context) RespondNoContent added in v0.7.0

func (ctx *Context) RespondNoContent() error

func (*Context) RespondText added in v0.7.0

func (ctx *Context) RespondText(statusCode int, msg string) error

func (*Context) ResponseSize added in v0.7.0

func (ctx *Context) ResponseSize() int64

func (*Context) SetResponseHeader added in v0.7.0

func (ctx *Context) SetResponseHeader(name, value string)

func (*Context) StartTime added in v0.7.0

func (ctx *Context) StartTime() time.Time

func (*Context) StatusCode added in v0.7.0

func (ctx *Context) StatusCode() int

func (*Context) Stream added in v0.7.0

func (ctx *Context) Stream(step func(send func(name, value string), flush func()) bool) bool

Stream returns TRUE if client gone, FALSE if server breaks stream.

func (*Context) TraceID added in v0.7.0

func (ctx *Context) TraceID() string

func (*Context) Unauthorized added in v0.7.6

func (ctx *Context) Unauthorized() error

func (*Context) UserAgent added in v0.7.0

func (ctx *Context) UserAgent() string

func (*Context) UserIP added in v0.7.0

func (ctx *Context) UserIP() string

type CorsOptions added in v0.7.0

type CorsOptions struct {
	AllowOrigins     []string
	AllowMethods     []string
	AllowedHeaders   []string
	ExposedHeaders   []string
	AllowCredentials bool
	MaxAge           time.Duration
	// contains filtered or unexported fields
}

type Group

type Group struct {
	// contains filtered or unexported fields
}

func NewGroup added in v0.7.0

func NewGroup(r *Router, patternPrefix string, middleware ...Middleware) *Group

func (*Group) ANY

func (g *Group) ANY(pattern string, handler Handler, middlewares ...Middleware)

func (*Group) DELETE

func (g *Group) DELETE(pattern string, handler Handler, middlewares ...Middleware)

func (*Group) DeclareHandler added in v0.7.0

func (g *Group) DeclareHandler(method, pattern string, handler Handler, middlewares ...Middleware)

func (*Group) GET

func (g *Group) GET(pattern string, handler Handler, middlewares ...Middleware)

func (*Group) Group added in v0.7.0

func (g *Group) Group(patternPrefix string) *Group

func (*Group) HEAD added in v0.7.0

func (g *Group) HEAD(pattern string, handler Handler, middlewares ...Middleware)

func (*Group) OPTIONS added in v0.7.0

func (g *Group) OPTIONS(pattern string, handler Handler, middlewares ...Middleware)

func (*Group) PATCH

func (g *Group) PATCH(pattern string, handler Handler, middlewares ...Middleware)

func (*Group) POST

func (g *Group) POST(pattern string, handler Handler, middlewares ...Middleware)

func (*Group) PUT

func (g *Group) PUT(pattern string, handler Handler, middlewares ...Middleware)

func (*Group) Use added in v0.7.0

func (g *Group) Use(middleware ...Middleware)

type Handler

type Handler func(ctx *Context) error

Handler returns an error only in unexpected behaviors (this error will be sent as internal server error with status 500)

func AddSecurityHeadersMiddleware added in v0.7.0

func AddSecurityHeadersMiddleware(next Handler) Handler

func RecoverMiddleware added in v0.7.0

func RecoverMiddleware(next Handler) Handler

func ServeDir added in v0.0.3

func ServeDir(dir, stripPrefix string) Handler
 	ServeDir servers dir files dynamically based on request URL path:

	file_to_serve = dir_path + url_path
	file_to_serve = dir_path + StripPrefix(url_path, prefix)

	Route("/", httpx.ServeDir("/data/static"))
	GET	/1.html	 -->  200 OK  /data/static/1.html
	GET /2.html	 -->  200 OK  /data/static/2.html

	Route("/data/static", httpx.ServeDir("/data/static"))
	GET	/data/static/1.html	 -->  404 Not Found  /data/static/data/static/1.html
	GET /data/static/2.html	 -->  404 Not Found  /data/static/data/static/2.html

	r.Route("/static", httpx.ServeDir("/data/static"), middleware.StripPrefix("/static"))
	GET	/static/1.html  -->  200 OK  /data/static/1.html
	GET	/static/2.html  -->  200 OK  /data/static/2.html

func ServeFile added in v0.0.3

func ServeFile(filePath string) Handler

func SlashRedirectMiddleware added in v0.7.0

func SlashRedirectMiddleware(next Handler) Handler

type LogFunc added in v0.7.0

type LogFunc func(ctx *Context)

type Middleware

type Middleware func(next Handler) Handler

func BasicAuthMiddleware added in v0.7.11

func BasicAuthMiddleware(users map[string]string) Middleware

func CorsMiddleware added in v0.7.0

func CorsMiddleware(options CorsOptions) Middleware

func HealthcheckMiddleware added in v0.7.0

func HealthcheckMiddleware(path string) Middleware

type ProtectedFS added in v0.0.3

type ProtectedFS struct {
	// contains filtered or unexported fields
}

func (ProtectedFS) Open added in v0.0.3

func (pfs ProtectedFS) Open(name string) (fs.File, error)

type ResponseWrapper added in v0.7.0

type ResponseWrapper struct {
	http.ResponseWriter
	// contains filtered or unexported fields
}

func NewResponseWrapper added in v0.7.0

func NewResponseWrapper(w http.ResponseWriter) *ResponseWrapper

func (*ResponseWrapper) Flusher added in v0.7.0

func (ww *ResponseWrapper) Flusher() http.Flusher

func (*ResponseWrapper) Header added in v0.7.0

func (ww *ResponseWrapper) Header() http.Header

func (*ResponseWrapper) Size added in v0.7.0

func (ww *ResponseWrapper) Size() int64

func (*ResponseWrapper) Status added in v0.7.0

func (ww *ResponseWrapper) Status() int

func (*ResponseWrapper) Write added in v0.7.0

func (ww *ResponseWrapper) Write(p []byte) (int, error)

func (*ResponseWrapper) WriteHeader added in v0.7.0

func (ww *ResponseWrapper) WriteHeader(statusCode int)

type Router

type Router struct {
	// contains filtered or unexported fields
}

func NewRouter

func NewRouter(logger *slog.Logger, opts ...SetOpt) *Router

func (*Router) ANY

func (r *Router) ANY(pattern string, handler Handler, middlewares ...Middleware)

func (*Router) DELETE

func (r *Router) DELETE(pattern string, handler Handler, middlewares ...Middleware)

func (*Router) GET

func (r *Router) GET(pattern string, handler Handler, middlewares ...Middleware)

func (*Router) Group added in v0.0.3

func (r *Router) Group(patternPrefix string) *Group

func (*Router) HEAD added in v0.7.0

func (r *Router) HEAD(pattern string, handler Handler, middlewares ...Middleware)

func (*Router) OPTIONS added in v0.7.0

func (r *Router) OPTIONS(pattern string, handler Handler, middlewares ...Middleware)

func (*Router) PATCH

func (r *Router) PATCH(pattern string, handler Handler, middlewares ...Middleware)

func (*Router) POST

func (r *Router) POST(pattern string, handler Handler, middlewares ...Middleware)

func (*Router) PUT

func (r *Router) PUT(pattern string, handler Handler, middlewares ...Middleware)

func (*Router) ServeHTTP

func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request)

func (*Router) Use

func (r *Router) Use(middleware ...Middleware)

type SetOpt added in v0.7.0

type SetOpt func(r *Router)

func WithLogAfterResponse added in v0.7.0

func WithLogAfterResponse(f LogFunc) SetOpt

func WithLogBeforeRequest added in v0.7.0

func WithLogBeforeRequest(f LogFunc) SetOpt

func WithSlashRedirection added in v0.7.0

func WithSlashRedirection(shouldRedirect bool) SetOpt

WithSlashRedirection redirects to url without trailing slashes if shouldRedirect is true

Directories

Path Synopsis
mux module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL