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 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 HandlerFunc
- type HttpError
- 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
- type Option
- type Response
- type SelfValidatable
- 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" )
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"} )
var Binders = []Binder{
&queryBinder{},
&jsonBinder{},
&formBinder{},
}
Binders 默认链。 建议顺序:先 Meta 后 Body。这样如果字段冲突,Body 的值通常会覆盖 Query 的值(取决于 decoder 实现,但在逻辑上 Body 优先级更高)。
var ErrorHook func(ctx context.Context, err error) = nil
ErrorHook 是一个回调函数,用于处理错误的副作用(如记录日志)。 用户可以在 NewHandler 的 Option 中覆盖它。
var GetTraceID func(ctx context.Context) string = nil
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
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 等元数据 (非互斥) 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 HandlerFunc ¶
type HttpError ¶
HttpError 是一个通用的错误实现,同时满足 error, ErrorCoder 和 BizCoder 接口。
func NewError ¶ added in v0.2.0
NewError 创建一个新的 HttpError。 httpCode: HTTP 状态码 (如 404) bizCode: 业务错误码 (如 "USER_NOT_FOUND") msg: 错误描述
func (*HttpError) HTTPStatus ¶
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 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 防止服务崩溃
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 WithValidator ¶ added in v0.2.0
WithValidator 设置自定义的 Validator 实例
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 SelfValidatable ¶
SelfValidatable 是高性能验证接口。 如果 Request 结构体实现了此接口,将跳过反射验证。