Documentation
¶
Index ¶
- Constants
- Variables
- func Bind(r *http.Request, v any) error
- func CommonBind(s Source, v any) error
- func DefaultAccessLog(ctx context.Context, param *AccessLogParam)
- func DefaultGrpcAccessLog(ctx context.Context, param *GrpcAccessLogParam)
- func HandlerWrap[REQ, RESP any](service Service[*REQ, *RESP]) http.Handler
- func HandlerWrapCommon[REQ, RESP any](service types.Service[*REQ, *RESP]) http.Handler
- func JsonMarshal(ctx context.Context, v any) ([]byte, string, error)
- func RegisterErrCode(code ErrCode, msg string)
- func RegisterErrCodeHttpStatus(code ErrCode, status int)
- func RegisterErrCodeMap(enum map[int32]string)
- func RespodWithErrHeader(ctx context.Context) context.Context
- func Respond(ctx context.Context, w http.ResponseWriter, data any) (int, error)
- func RespondErrCodeMsg(ctx context.Context, w http.ResponseWriter, code ErrCode, msg string)
- func RespondError(ctx context.Context, w http.ResponseWriter, err error) (int, error)
- func RespondSSE[T ~string](ctx context.Context, w http.ResponseWriter, dataSource iter.Seq[T]) (int, error)
- func RespondStream(ctx context.Context, w http.ResponseWriter, ...) (int, error)
- func RespondSuccess(ctx context.Context, w http.ResponseWriter, res any) (int, error)
- func Serve(w http.ResponseWriter, r *http.Request, data any)
- func ServeErrCodeMsg(w http.ResponseWriter, r *http.Request, code ErrCode, msg string)
- func ServeError(w http.ResponseWriter, r *http.Request, err error)
- func ServeSuccess(w http.ResponseWriter, r *http.Request, res any)
- func SetMultipartFrormFile(value reflect.Value, field *reflect.StructField, files []*multipart.FileHeader) (isSet bool, err error)
- func StatusFromErrCode(code ErrCode) int
- func UnWrapContext(ctx context.Context) any
- func WithMetadata(ctx context.Context, metadata *Metadata) context.Context
- func WrapContext(v any) context.Context
- type AccessLog
- type AccessLogConfig
- type AccessLogParam
- type BidiStream
- type BidiStreamHandler
- type BindFunc
- type Binder
- type Body
- type ClientSideStream
- type ClientSideStreamHandler
- type Codec
- type CommonAnyResp
- type CommonBinder
- type CommonProtoResp
- type CommonResp
- type CorsConfig
- type DebugHandlerConfig
- type Delimited
- type ErrCode
- type ErrResp
- func (res *ErrResp) ErrResp() *ErrResp
- func (x *ErrResp) Error() string
- func (x *ErrResp) GRPCStatus() *status.Status
- func (x *ErrResp) MarshalJSON() ([]byte, error)
- func (res *ErrResp) Respond(ctx context.Context, w http.ResponseWriter) (int, error)
- func (res *ErrResp) ServeHTTP(w http.ResponseWriter, r *http.Request)
- type Field
- type GRPCStatus
- type GrpcAccessLog
- type GrpcAccessLogParam
- type GrpcConfig
- type GrpcHandler
- type HeaderSource
- type Http3Config
- type MarshalFunc
- type Marshaler
- type Metadata
- type MultipartSource
- type OpenapiConfig
- type Option
- func WithContext(ctx context.Context) Option
- func WithCors(handler func(cors *cors.Options)) Option
- func WithGrpc(handler func(option *GrpcConfig)) Option
- func WithGrpcHandler(handler func(*grpc.Server)) Option
- func WithHTTP3(handler func(s *Http3Config)) Option
- func WithHttp(handler func(s *http.Server)) Option
- func WithHttpHandler(handler http.Handler) Option
- func WithInternalServer(handler func(s *http.Server)) Option
- func WithMiddleware(mw ...httpx.Middleware) Option
- func WithOtel(handler func(otel *OtelConfig)) Option
- type OtelConfig
- type PrometheusConfig
- type ProtoMessage
- type QuerySource
- type ReqResp
- type RequestSource
- type RequestType
- type Responder
- type Response
- type ResponseBody
- type ResponseFile
- type ResponseStream
- type ResponseWriter
- type SSEData
- type Server
- func (s *Server) AfterInject()
- func (s *Server) BeforeInject()
- func (s *Server) Init()
- func (s *Server) InternalHandler(mux *http.ServeMux)
- func (s *Server) Run()
- func (s *Server) StreamAccess(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, ...) (err error)
- func (s *Server) UnaryAccess(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, ...) (resp interface{}, err error)
- func (s *Server) WithContext(ctx context.Context) *Server
- func (s *Server) WithOptions(options ...Option) *Server
- type ServerSideStream
- type ServerSideStreamHandler
- type Service
- type Source
- type StatusCode
- type StreamContentType
- type Tag
- type UnmarshalFunc
- type Unmarshaler
- type UriSource
- type XXXResponseBody
Constants ¶
View Source
const ( ContentTypeJson = "json" ContentTypeProtobuf = "protobuf" )
View Source
const ScopeName = "github.com/hopeio/mix"
Variables ¶
View Source
var ( DefaultMemory int64 = 32 << 20 CommonTag = "json" Validate = validator.ValidateStruct )
View Source
var ( DefaultUnmarshal UnmarshalFunc = func(ctx context.Context, contentType string, data []byte, v any) error { return jsonx.Unmarshal(data, v) } DefaultMarshal MarshalFunc = func(ctx context.Context, v any) (data []byte, contentType string, err error) { switch msg := v.(type) { case *CommonAnyResp, *ErrResp: data, err = jsonx.Marshal(msg) case error: data, err = jsonx.Marshal(ErrRespFrom(msg)) } data, err = jsonx.Marshal(&CommonAnyResp{Data: v}) if err != nil { return data, httpx.ContentTypeText, err } return data, httpx.ContentTypeJson, nil } )
View Source
var ErrHeaderKey errHeaderKey
View Source
var MetadataKey = metadataKey{}
Functions ¶
func CommonBind ¶ added in v1.21.3
unhandle multipart form data currently
func DefaultAccessLog ¶
func DefaultAccessLog(ctx context.Context, param *AccessLogParam)
func DefaultGrpcAccessLog ¶
func DefaultGrpcAccessLog(ctx context.Context, param *GrpcAccessLogParam)
func HandlerWrap ¶ added in v1.21.3
func HandlerWrapCommon ¶ added in v1.21.3
func JsonMarshal ¶ added in v1.21.3
func RegisterErrCode ¶ added in v1.21.3
不是并发安全的,在初始化的时候做
func RegisterErrCodeHttpStatus ¶ added in v1.21.3
func RegisterErrCodeMap ¶ added in v1.21.3
func RespodWithErrHeader ¶ added in v1.21.3
func RespondErrCodeMsg ¶ added in v1.21.3
func RespondError ¶ added in v1.21.3
func RespondSSE ¶ added in v1.21.3
func RespondStream ¶ added in v1.21.3
func RespondStream(ctx context.Context, w http.ResponseWriter, dataSource iter.Seq[iox.WriterToCloser]) (int, error)
func RespondSuccess ¶ added in v1.21.3
func ServeErrCodeMsg ¶ added in v1.21.3
func ServeError ¶ added in v1.21.3
func ServeError(w http.ResponseWriter, r *http.Request, err error)
func ServeSuccess ¶ added in v1.21.3
func ServeSuccess(w http.ResponseWriter, r *http.Request, res any)
func SetMultipartFrormFile ¶ added in v1.21.3
func SetMultipartFrormFile(value reflect.Value, field *reflect.StructField, files []*multipart.FileHeader) (isSet bool, err error)
func StatusFromErrCode ¶ added in v1.21.3
func UnWrapContext ¶ added in v1.21.3
func WrapContext ¶ added in v1.21.3
Types ¶
type AccessLog ¶
type AccessLog = func(ctx context.Context, param *AccessLogParam)
type AccessLogConfig ¶
type AccessLogParam ¶
type BidiStream ¶ added in v1.21.3
type BidiStream[Req, Resp any, ReqPtr ProtoMessage[Req], RespPtr ProtoMessage[Resp]] interface { Recv() (ReqPtr, error) Send(RespPtr) error grpc.ServerStream }
type BidiStreamHandler ¶ added in v1.21.3
type BidiStreamHandler[Req, Resp any, ReqPtr ProtoMessage[Req], RespPtr ProtoMessage[Resp], S BidiStream[Req, Resp, ReqPtr, RespPtr]] func(S) error
type ClientSideStream ¶ added in v1.21.3
type ClientSideStream[Req, Resp any, ReqPtr ProtoMessage[Req], RespPtr ProtoMessage[Resp]] interface { Recv() (ReqPtr, error) SendAndClose(RespPtr) error grpc.ServerStream }
type ClientSideStreamHandler ¶ added in v1.21.3
type ClientSideStreamHandler[Req, Resp any, ReqPtr ProtoMessage[Req], RespPtr ProtoMessage[Resp], S ClientSideStream[Req, Resp, ReqPtr, RespPtr]] func(S) error
type Codec ¶ added in v1.21.3
type Codec interface {
Marshaler
Unmarshaler
}
type CommonAnyResp ¶ added in v1.21.3
type CommonAnyResp = CommonResp[any]
func NewCommonAnyResp ¶ added in v1.21.3
func NewCommonAnyResp(code ErrCode, msg string, data any) *CommonAnyResp
type CommonBinder ¶ added in v1.21.3
type CommonProtoResp ¶ added in v1.21.3
type CommonProtoResp[T proto.Message] CommonResp[T]
func NewCommonProtoResp ¶ added in v1.21.3
func NewCommonProtoResp[T proto.Message](code ErrCode, msg string, data T) *CommonProtoResp[T]
func (*CommonProtoResp[T]) MarshalProto ¶ added in v1.21.3
func (r *CommonProtoResp[T]) MarshalProto() ([]byte, error)
func (*CommonProtoResp[T]) UnmarshalProto ¶ added in v1.21.3
func (r *CommonProtoResp[T]) UnmarshalProto(data []byte) error
UnmarshalProto 手动解码 protobuf 数据到 CommonProtoResp
type CommonResp ¶ added in v1.21.3
type CommonResp[T any] struct { Code ErrCode `json:"code"` Msg string `json:"msg,omitempty"` //验证码 Data T `json:"data,omitempty"` }
CommonResp 主要用来接收返回,发送请使用 CommonAnyResp
func (*CommonResp[T]) Respond ¶ added in v1.21.3
func (res *CommonResp[T]) Respond(ctx context.Context, w http.ResponseWriter) (int, error)
func (*CommonResp[T]) ServeHTTP ¶ added in v1.21.3
func (res *CommonResp[T]) ServeHTTP(w http.ResponseWriter, r *http.Request)
type CorsConfig ¶
type DebugHandlerConfig ¶
type Delimited ¶ added in v1.21.3
type Delimited interface {
// Delimiter returns the record separator for the stream.
Delimiter() []byte
}
Delimited defines the streaming delimiter.
type ErrCode ¶ added in v1.21.3
type ErrCode int32
const ( // SysErr ErrCode = -1 Success ErrCode = 0 Canceled ErrCode = 1 Unknown ErrCode = 2 InvalidArgument ErrCode = 3 DeadlineExceeded ErrCode = 4 NotFound ErrCode = 5 AlreadyExists ErrCode = 6 PermissionDenied ErrCode = 7 ResourceExhausted ErrCode = 8 FailedPrecondition ErrCode = 9 Aborted ErrCode = 10 OutOfRange ErrCode = 11 Unimplemented ErrCode = 12 Internal ErrCode = 13 DataLoss ErrCode = 15 Unauthenticated ErrCode = 16 )
func (ErrCode) GRPCStatus ¶ added in v1.21.3
type ErrResp ¶ added in v1.21.3
func ErrRespFrom ¶ added in v1.21.3
func NewErrResp ¶ added in v1.21.3
func (*ErrResp) GRPCStatus ¶ added in v1.21.3
func (*ErrResp) MarshalJSON ¶ added in v1.21.3
type Field ¶ added in v1.21.3
type Field struct {
Name string
Tags []Tag
Index int
Field *reflect.StructField
}
type GRPCStatus ¶
type GrpcAccessLog ¶
type GrpcAccessLog = func(ctx context.Context, param *GrpcAccessLogParam)
type GrpcAccessLogParam ¶
type GrpcConfig ¶
type GrpcConfig struct {
Addr string
RecordFunc GrpcAccessLog
Options []grpc.ServerOption
UnaryServerInterceptors []grpc.UnaryServerInterceptor
StreamServerInterceptors []grpc.StreamServerInterceptor
}
type GrpcHandler ¶ added in v1.21.3
type GrpcHandler[Req, Resp any, ReqPtr ProtoMessage[Req], RespPtr ProtoMessage[Resp]] func(ctx context.Context, in ReqPtr) (RespPtr, error)
type HeaderSource ¶ added in v1.21.3
type Http3Config ¶
type MarshalFunc ¶ added in v1.21.3
type Marshaler ¶ added in v1.21.3
type Marshaler interface {
// Marshal marshals "v" into byte sequence.
Marshal(ctx context.Context, v any) (data []byte, contentType string)
}
Marshaler defines a conversion between byte sequence and gRPC payloads / fields.
type Metadata ¶
type Metadata struct {
sync.RWMutex
Logger *log.Logger
Data any
DataM map[any]any
TraceId string
RequestType RequestType
Token string
AuthRaw []byte
AuthID string
Request *http.Request
ResponseWriter http.ResponseWriter
RequestAt time.Time
IncomingMD metadata.MD
ServerTransportStream grpc.ServerTransportStream
AccessLogFields []zap.Field
Baggage baggage.Baggage // can not edit
}
func GetMetadata ¶
type MultipartSource ¶ added in v1.21.3
type OpenapiConfig ¶
type Option ¶
type Option func(server *Server)
func WithContext ¶
func WithGrpc ¶
func WithGrpc(handler func(option *GrpcConfig)) Option
func WithGrpcHandler ¶
func WithHTTP3 ¶
func WithHTTP3(handler func(s *Http3Config)) Option
func WithHttpHandler ¶
func WithInternalServer ¶
func WithMiddleware ¶
func WithMiddleware(mw ...httpx.Middleware) Option
func WithOtel ¶
func WithOtel(handler func(otel *OtelConfig)) Option
type OtelConfig ¶
type OtelConfig struct {
Enabled bool
OtelhttpOpts []otelhttp.Option
OtelgrpcOpts []otelgrpc.Option
}
func (*OtelConfig) SetOtelgrpcOptions ¶
func (c *OtelConfig) SetOtelgrpcOptions(otelgrpcOpts []otelgrpc.Option)
func (*OtelConfig) SetOtelhttpOptions ¶
func (c *OtelConfig) SetOtelhttpOptions(otelhttpOpts []otelhttp.Option)
type PrometheusConfig ¶
type PrometheusConfig struct {
Enabled bool
HttpURI string
promhttp.HandlerOpts
}
type ProtoMessage ¶ added in v1.21.3
type QuerySource ¶ added in v1.21.3
type RequestSource ¶ added in v1.21.3
func (RequestSource) Body ¶ added in v1.21.3
func (s RequestSource) Body() (context.Context, string, io.ReadCloser)
func (RequestSource) Header ¶ added in v1.21.3
func (s RequestSource) Header() kvstruct.ValuesGetter
func (RequestSource) Query ¶ added in v1.21.3
func (s RequestSource) Query() kvstruct.ValuesGetter
func (RequestSource) Uri ¶ added in v1.21.3
func (s RequestSource) Uri() kvstruct.Getter
type RequestType ¶
type RequestType int
const ( RequestTypeHttp RequestType = iota RequestTypeGrpc )
type Response ¶ added in v1.21.3
type Response struct {
Status int `json:"status,omitempty"`
Headers http.Header `json:"header,omitempty"`
Body iox.WriterToCloser `json:"body,omitempty"`
}
type ResponseBody ¶ added in v1.21.3
type ResponseFile ¶ added in v1.21.3
type ResponseFile struct {
Name string `json:"name"`
Body iox.WriterToCloser `json:"body"`
ContentType string
}
func (*ResponseFile) Respond ¶ added in v1.21.3
func (res *ResponseFile) Respond(ctx context.Context, w http.ResponseWriter) (int, error)
func (*ResponseFile) ServeHTTP ¶ added in v1.21.3
func (res *ResponseFile) ServeHTTP(w http.ResponseWriter, r *http.Request)
type ResponseStream ¶ added in v1.21.3
type ResponseStream struct {
Status int `json:"status,omitempty"`
Headers http.Header `json:"header,omitempty"`
Body iter.Seq[iox.WriterToCloser] `json:"body,omitempty"`
}
func (*ResponseStream) Respond ¶ added in v1.21.3
func (res *ResponseStream) Respond(ctx context.Context, w http.ResponseWriter) (int, error)
func (*ResponseStream) ServeHTTP ¶ added in v1.21.3
func (res *ResponseStream) ServeHTTP(w http.ResponseWriter, r *http.Request)
type ResponseWriter ¶ added in v1.21.3
type Server ¶
type Server struct {
http.Server
CertFile string
KeyFile string
AccessLog AccessLogConfig
HTTP3 Http3Config
Cors CorsConfig
Grpc GrpcConfig
InternalServer http.Server
Openapi OpenapiConfig
Otel OtelConfig
DebugHandler DebugHandlerConfig
BaseContext context.Context
Middlewares []httpx.Middleware
HttpHandler http.Handler
GrpcHandler func(*grpc.Server)
// contains filtered or unexported fields
}
func (*Server) AfterInject ¶
func (s *Server) AfterInject()
func (*Server) InternalHandler ¶
InternalHandler 往内部端口的私有 mux 上注册 OpenAPI 文档与调试端点
func (*Server) StreamAccess ¶
func (s *Server) StreamAccess(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) (err error)
func (*Server) UnaryAccess ¶
func (s *Server) UnaryAccess(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error)
func (*Server) WithOptions ¶
type ServerSideStream ¶ added in v1.21.3
type ServerSideStream[Resp any, RespPtr ProtoMessage[Resp]] interface { Send(RespPtr) error grpc.ServerStream }
type ServerSideStreamHandler ¶ added in v1.21.3
type ServerSideStreamHandler[Req, Resp any, ReqPtr ProtoMessage[Req], RespPtr ProtoMessage[Resp], S ServerSideStream[Resp, RespPtr]] func(ReqPtr, S) error
type Source ¶ added in v1.21.3
type Source interface {
Uri() kvstruct.Getter
Query() kvstruct.ValuesGetter
Header() kvstruct.ValuesGetter
Body() (context.Context, string, io.ReadCloser)
}
type StatusCode ¶ added in v1.21.3
type StreamContentType ¶ added in v1.21.3
type StreamContentType interface {
// StreamContentType returns the content type for a stream. This shares the
// same behaviour as for `Marshaler.ContentType`, but is called, if present,
// in the case of a streamed response.
StreamContentType(v any) string
}
StreamContentType defines the streaming content type.
type UnmarshalFunc ¶ added in v1.21.3
type Unmarshaler ¶ added in v1.21.3
type XXXResponseBody ¶ added in v1.21.3
type XXXResponseBody interface {
XXX_ResponseBody() any
}
Source Files
¶
Click to show internal directories.
Click to hide internal directories.
