Documentation
¶
Index ¶
- Constants
- Variables
- func Bind(r *http.Request, v any, binders ...Binder) error
- func Chain(h http.Handler, mws ...Middleware) http.Handler
- func Error(w http.ResponseWriter, r *http.Request, err error, ...)
- func GetIdentity(ctx context.Context) any
- func NewHandler[Req any, Res any](fn HandlerFunc[Req, Res], opts ...Option) http.HandlerFunc
- func NewStreamHandler[Req any, Res Streamable](fn HandlerFunc[Req, Res], opts ...Option) http.HandlerFunc
- func RegisterOnShutdown(ctx context.Context, fn func())
- func Validate(ctx context.Context, v any, validators ...*validator.Validate) error
- type AuthValidator
- type BasicValidator
- type Binder
- type BinderType
- type BizCoder
- type CORSOptions
- type ErrorCoder
- type FileResponse
- type FormBinder
- type HandlerFunc
- type HttpError
- type JsonBinder
- type Limiter
- type LogFunc
- type Middleware
- func AuthBasic(validator BasicValidator, realm string) Middleware
- func AuthBearer(validator AuthValidator, realm string) Middleware
- func CORS(opts CORSOptions) Middleware
- func DefaultCORS() Middleware
- func Logger(logFunc LogFunc) Middleware
- func RateLimit(limiter Limiter, errhooks ...func(ctx context.Context, err error)) Middleware
- func Recovery(panicHook func(ctx context.Context, err interface{})) Middleware
- func SecurityHeaders(cfgs ...SecurityConfig) Middleware
- type Option
- func AddBinders(b ...Binder) Option
- func NoEnvelope() Option
- func WithBinders(b ...Binder) Option
- func WithErrorHook(hook func(ctx context.Context, err error)) Option
- func WithMaxBodySize(maxBytes int64) Option
- func WithMultipartLimit(limit int64) Option
- func WithValidator(v *validator.Validate) Option
- type PathBinder
- type PublicError
- type QueryBinder
- type Response
- type SecurityConfig
- type SelfValidatable
- type ShutdownManager
- type Streamable
Constants ¶
const ( // CodeOK 表示成功 CodeOK = "OK" // CodeInternalError 服务器内部错误 (500) CodeInternalError = "INTERNAL_ERROR" // CodeBadRequest 请求参数错误 (400) CodeBadRequest = "BAD_REQUEST" CodeUnauthorized = "UNAUTHORIZED" // CodeForbidden 无权限 (403) CodeForbidden = "FORBIDDEN" // CodeNotFound 资源不存在 (404) CodeNotFound = "NOT_FOUND" // CodeTooManyRequests 请求过多 (429) CodeTooManyRequests = "TOO_MANY_REQUESTS" // CodeConflict 资源冲突 (409) CodeConflict = "CONFLICT" // CodeValidation 校验失败 (400) CodeValidation = "VALIDATION_FAILED" // CodeRequestEntityTooLarge 请求体过大 (413) CodeRequestEntityTooLarge = "REQUEST_ENTITY_TOO_LARGE" )
const DefaultMultipartMemory = 8 << 20
DefaultMultipartMemory 默认内存限制调整为 8MB 超过此限制的部分将暂存到磁盘临时文件中,防止容器环境 OOM。
const IdentityKey contextKey = "identity"
Variables ¶
var ( ErrBadRequest = &HttpError{HttpCode: http.StatusBadRequest, BizCode: CodeBadRequest, Msg: "Bad Request"} ErrForbidden = &HttpError{HttpCode: http.StatusForbidden, BizCode: CodeForbidden, Msg: "Forbidden"} ErrNotFound = &HttpError{HttpCode: http.StatusNotFound, BizCode: CodeNotFound, Msg: "Not Found"} ErrTooManyRequests = &HttpError{HttpCode: http.StatusTooManyRequests, BizCode: CodeTooManyRequests, Msg: "Too Many Requests"} ErrInternal = &HttpError{HttpCode: http.StatusInternalServerError, BizCode: CodeInternalError, Msg: "Internal Server Error"} ErrRequestEntityTooLarge = &HttpError{HttpCode: http.StatusRequestEntityTooLarge, BizCode: CodeRequestEntityTooLarge, Msg: "Request Entity Too Large"} )
var Binders = []Binder{ &PathBinder{}, &QueryBinder{}, &JsonBinder{DisallowUnknownFields: true}, &FormBinder{MaxMemory: DefaultMultipartMemory}, }
Binders 默认链。 顺序: Path -> Query -> Json/Form
var ErrorHook func(ctx context.Context, err error) = nil
ErrorHook 是一个回调函数,用于处理错误的副作用(如记录日志)。 用户可以在 NewHandler 的 Option 中覆盖它。
var GetTraceID func(ctx context.Context) string = nil
GetTraceID 是一个依赖注入点。 外部库(如 o11y)应该设置这个函数,以便 httpx 能获取到 TraceID。
var SafeMode = false
SafeMode 控制是否开启错误脱敏。 建议在生产环境设置为 true。
var SchemaDecoder = schema.NewDecoder()
var Validator = validator.New()
Validator 是默认的验证器实例
Functions ¶
func Error ¶
func Error(w http.ResponseWriter, r *http.Request, err error, errhooks ...func(ctx context.Context, err error))
Error 负责将 error 转换为 HTTP 响应并写入 ResponseWriter。
func NewHandler ¶
func NewHandler[Req any, Res any](fn HandlerFunc[Req, Res], opts ...Option) http.HandlerFunc
func NewStreamHandler ¶ added in v1.4.1
func NewStreamHandler[Req any, Res Streamable](fn HandlerFunc[Req, Res], opts ...Option) http.HandlerFunc
NewStreamHandler 创建一个流式处理函数。
func RegisterOnShutdown ¶ added in v1.4.0
RegisterOnShutdown 在当前请求的上下文中注册一个关闭回调。 当 ShutdownManager.Shutdown 被调用时,这些回调会被并发执行。 适用于 WebSocket、SSE 等需要发送协议级关闭信号(如 Close Frame)的场景。
Types ¶
type AuthValidator ¶
AuthValidator 定义验证回调函数签名。 返回的 any 将被注入到 Context 中(例如 User 对象)。
type BasicValidator ¶
BasicValidator 定义 Basic Auth 验证回调。
type BinderType ¶ added in v0.2.0
type BinderType int
BinderType 定义绑定器类型
const ( // BinderMeta 表示绑定 URL Query, Header, Path 等元数据 (非互斥) BinderMeta BinderType = iota // BinderBody 表示绑定 Request Body (互斥,流只能读一次) BinderBody )
type BizCoder ¶ added in v0.2.0
type BizCoder interface {
BizStatus() string
}
BizCoder 定义了如何提取业务错误码 (String)。 任何实现了此接口的 error,httpx 都会使用其返回的字符串作为响应体中的 code 字段。
type CORSOptions ¶
type CORSOptions struct {
AllowedOrigins []string
AllowedMethods []string
AllowedHeaders []string
ExposedHeaders []string
AllowCredentials bool
MaxAge int
}
CORSOptions 定义 CORS 配置
type ErrorCoder ¶
type ErrorCoder interface {
HTTPStatus() int
}
ErrorCoder 定义了如何提取 HTTP 状态码。 任何实现了此接口的 error,httpx 都会使用其返回的状态码,而不是默认的 500。
type FileResponse ¶
FileResponse 是一个实现了 Streamable 的文件响应辅助类。
func (*FileResponse) Headers ¶
func (f *FileResponse) Headers() map[string]string
type FormBinder ¶ added in v1.1.0
type FormBinder struct {
MaxMemory int64
}
func (*FormBinder) Name ¶ added in v1.1.0
func (b *FormBinder) Name() string
func (*FormBinder) Type ¶ added in v1.1.0
func (b *FormBinder) Type() BinderType
type HandlerFunc ¶
HandlerFunc 定义业务处理函数签名。 坚持使用标准 context.Context,避免框架耦合, 我们和 gin 那样的框架有本质上的不同, 我们所有的实现都是通过配置和中间件完成, 所谓渐进式开发即是如此, 用户不必依赖我们, 但有我们会更好。
type HttpError ¶
HttpError 是一个通用的错误实现,同时满足 error, ErrorCoder 和 BizCoder 接口。 HttpError 被视为“安全的”,因为它是开发者显式构造的业务错误。
func NewError ¶ added in v0.2.0
NewError 创建一个新的 HttpError。 httpCode: HTTP 状态码 (如 404) bizCode: 业务错误码 (如 "USER_NOT_FOUND") msg: 错误描述
func (*HttpError) HTTPStatus ¶
func (*HttpError) PublicMessage ¶ added in v1.4.3
type JsonBinder ¶ added in v1.1.0
type JsonBinder struct {
// DisallowUnknownFields 控制是否允许 JSON 中包含结构体未定义的字段。
// 默认为 true (不允许),否则可能导致“参数污染”或逻辑绕过。。
DisallowUnknownFields bool
}
func (*JsonBinder) Name ¶ added in v1.1.0
func (b *JsonBinder) Name() string
func (*JsonBinder) Type ¶ added in v1.1.0
func (b *JsonBinder) Type() BinderType
type Middleware ¶
Middleware 标准中间件定义
func AuthBasic ¶
func AuthBasic(validator BasicValidator, realm string) Middleware
AuthBasic Basic Auth 认证中间件。
func AuthBearer ¶
func AuthBearer(validator AuthValidator, realm string) Middleware
AuthBearer Bearer Token 认证中间件。 realm: 认证域名称,例如 "MyAPI"。如果为空,默认为 "Restricted"。
func DefaultCORS ¶
func DefaultCORS() Middleware
DefaultCORS 返回一个宽容的 CORS 中间件(开发环境常用)。 注意:为了安全,默认禁用了 AllowCredentials。 如果需要携带 Cookie/Auth 头,请手动配置 CORS 并指定具体的 AllowedOrigins。
func RateLimit ¶
func RateLimit(limiter Limiter, errhooks ...func(ctx context.Context, err error)) Middleware
RateLimit 返回一个限流中间件。
func Recovery ¶
func Recovery(panicHook func(ctx context.Context, err interface{})) Middleware
Recovery 捕获 Panic 防止服务崩溃
func SecurityHeaders ¶ added in v1.4.0
func SecurityHeaders(cfgs ...SecurityConfig) Middleware
SecurityHeaders 返回一个中间件,用于添加通用的安全响应头。 包括: - X-Frame-Options: DENY (防止点击劫持) - X-Content-Type-Options: nosniff (防止 MIME 嗅探) - X-XSS-Protection: 1; mode=block (开启 XSS 过滤) - Referrer-Policy: strict-origin-when-cross-origin (控制 Referrer 泄露)
type Option ¶
type Option func(*config)
func AddBinders ¶ added in v0.2.0
AddBinders 在默认 Binder 链之前添加自定义 Binder
func WithBinders ¶ added in v0.2.0
WithBinders 设置自定义的 Binder 链(将覆盖默认链)
func WithErrorHook ¶ added in v0.2.0
WithErrorHook 设置该 Handler 专属的错误处理 Hook
func WithMaxBodySize ¶ added in v1.1.0
WithMaxBodySize 限制请求体 (Body) 的最大字节数。 超过限制时将返回 413 Request Entity Too Large。 这是一个硬限制,会切断连接,有效防止大文件上传攻击或磁盘耗尽。 建议值:常规 API 设为 2MB-10MB;文件上传接口根据业务需求设定 (如 100MB)。
func WithMultipartLimit ¶ added in v1.1.0
WithMultipartLimit 设置解析 Multipart 表单时的最大内存限制 (字节)。 默认值为 8MB (DefaultMultipartMemory)。 设置此选项会创建一个新的 FormBinder 实例并替换掉默认链中的实例, 这样可以避免修改全局变量,也不破坏链中其他 Binder 的配置。
func WithValidator ¶ added in v0.2.0
WithValidator 设置自定义的 Validator 实例
type PathBinder ¶ added in v1.4.0
type PathBinder struct{}
PathBinder (New Feature) 适配 Go 1.22 的 PathValue
func (*PathBinder) Name ¶ added in v1.4.0
func (b *PathBinder) Name() string
func (*PathBinder) Type ¶ added in v1.4.0
func (b *PathBinder) Type() BinderType
type PublicError ¶ added in v1.4.3
type PublicError interface {
PublicMessage() string
}
PublicError 定义了该错误是否包含可安全展示给前端的信息。 在 SafeMode=true 时,只有实现了此接口且 PublicMessage() 返回非空,或者具体类型为 *HttpError 的错误, 其原本的 Error() 内容才会被返回给客户端,否则将被替换为 "Internal Server Error"。
type QueryBinder ¶ added in v1.1.0
type QueryBinder struct{}
func (*QueryBinder) Name ¶ added in v1.1.0
func (b *QueryBinder) Name() string
func (*QueryBinder) Type ¶ added in v1.1.0
func (b *QueryBinder) Type() BinderType
type Response ¶
type Response[T any] struct { // Code 是业务错误码 (字符串),例如 "OK", "INVALID_PARAM", "USER_BANNED"。 // 它与 HTTP Status Code 分离,由前端用于展示具体的错误文案。 Code string `json:"code"` Message string `json:"message"` Data T `json:"data,omitempty"` TraceID string `json:"trace_id,omitempty"` }
Response 是默认的统一响应信封。
type SecurityConfig ¶ added in v1.4.3
type SecurityConfig struct {
// HSTSMaxAgeSeconds 启用 Strict-Transport-Security。0 表示禁用。
// 生产环境建议设置为 31536000 (1年)。
HSTSMaxAgeSeconds int
// HSTSIncludeSubdomains 是否包含子域名
HSTSIncludeSubdomains bool
// CSP Content-Security-Policy 值。
// 例如: "default-src 'self'"
CSP string
}
SecurityConfig 定义安全头配置
type SelfValidatable ¶
SelfValidatable 是高性能验证接口。 如果 Request 结构体实现了此接口,将跳过反射验证。
type ShutdownManager ¶ added in v1.4.0
type ShutdownManager struct {
// contains filtered or unexported fields
}
ShutdownManager 管理活跃连接的优雅关闭
func NewShutdownManager ¶ added in v1.4.0
func NewShutdownManager() *ShutdownManager
NewShutdownManager 创建一个新的关闭管理器
func (*ShutdownManager) Middleware ¶ added in v1.4.0
func (m *ShutdownManager) Middleware(next http.Handler) http.Handler
Middleware 返回一个中间件,用于跟踪请求生命周期并注入关闭支持。