mux

package
v1.0.0-alpha Latest Latest
Warning

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

Go to latest
Published: Feb 19, 2023 License: Apache-2.0 Imports: 26 Imported by: 0

Documentation

Index

Constants

View Source
const (
	UserID   = "-user-id-"
	TenantID = "-tenant-id-"
	IsAdmin  = "-is-admin-"
	RoleType = "-role-type-"
	UserName = "-user-name-"
)
View Source
const MaxBurstSize = 100000

Variables

View Source
var (
	WithoutTracePaths map[string]bool
)

Functions

func AfterContext

func AfterContext(ctx *gin.Context, ictx Context, r Resource, opt Option, ts time.Time)

func DisableTrace

func DisableTrace(ctx Context)

func ErrorHandler

func ErrorHandler(context Context, r Resource, err interface{}, opt Option)

func InitContext

func InitContext(r Resource, opt Option) gin.HandlerFunc

func ReleaseContext

func ReleaseContext(ctx Context)

func WrapHandlers

func WrapHandlers(handlers ...HandlerFunc) []gin.HandlerFunc

Types

type Context

type Context interface {

	// ClientIP 返回可靠的客户端IP
	ClientIP() string

	// ShouldBindXML 反序列化 querystring
	// tag: `xml:"xxx"` (注:不要写成 query)
	ShouldBindXML(obj interface{}) *errno.Errno

	// ShouldBindQuery 反序列化 querystring
	// tag: `form:"xxx"` (注:不要写成 query)
	ShouldBindQuery(obj interface{}) *errno.Errno

	// ShouldBindPostForm 反序列化 postform (querystring会被忽略)
	// tag: `form:"xxx"`
	ShouldBindPostForm(obj interface{}) *errno.Errno

	// ShouldBindForm 同时反序列化 querystring 和 postform;
	// 当 querystring 和 postform 存在相同字段时,postform 优先使用。
	// tag: `form:"xxx"`
	ShouldBindForm(obj interface{}) *errno.Errno

	// ShouldBindJSON 反序列化 postjson
	// tag: `json:"xxx"`
	ShouldBindJSON(obj interface{}) *errno.Errno

	// ShouldBindURI 反序列化 path 参数(如路由路径为 /user/:name)
	// tag: `uri:"xxx"`
	ShouldBindURI(obj interface{}) *errno.Errno

	// Redirect 重定向
	Redirect(code int, location string)

	// Trace 获取 Trace 对象
	Trace() Trace

	// Payload 正确返回
	Payload(payload interface{})

	// FilePayload 文件流返回
	FilePayload(fileName string, FileContent []byte)

	// HTML 返回界面
	HTML(name string, obj interface{})

	// XML 返回XML响应
	XML(obj interface{})

	// String 返回String响应
	String(format string, values ...interface{})

	// AbortWithError 错误返回
	AbortWithError(err *errno.Errno)

	// Header 获取 Header 对象
	Header() http.Header
	// GetHeader 获取 Header
	GetHeader(key string) string
	// SetHeader 设置 Header
	SetHeader(key, value string)

	// SetCookie 设置response cookie
	SetCookie(name, value string)
	// Cookie 获取request cookie
	Cookie(name string) (string, error)

	// IsAdmin 是否管理员
	IsAdmin() bool

	// RoleType 角色类型
	RoleType() int32

	// TenantID 租户ID
	TenantID() int64

	// UserID 获取 UserID
	UserID() int64

	// UserName 获取 UserName
	UserName() string

	// Alias 设置路由别名 for metrics uri
	Alias() string

	// RequestInputParams 获取所有参数
	RequestInputParams() url.Values
	// RequestPostFormParams  获取 PostForm 参数
	RequestPostFormParams() url.Values
	FormFile(name string) (*multipart.FileHeader, error)
	// Request 获取 Request 对象
	Request() *http.Request
	// RawData 获取 Request.Body
	RawData() []byte
	// Method 获取 Request.Method
	Method() string
	// Host 获取 Request.Host
	Host() string
	// Path 获取 请求的路径 Request.URL.Path (不附带 querystring)
	Path() string
	// URI 获取 unescape 后的 Request.URL.RequestURI()
	URI() string

	// RequestContext (包装 Trace + Logger) 获取一个用来向别的服务发起请求的 context (当client关闭后,会自动canceled).
	// 可以传一个数字进来, 作为timeout的值, 单位是秒. 注意只能传0个或一个, 不要传多了
	RequestContext(timeout ...int) *StdContext

	// ResponseWriter 获取 ResponseWriter 对象
	ResponseWriter() gin.ResponseWriter

	// GinContext 获取gin的ctx
	GinContext() *gin.Context
	// contains filtered or unexported methods
}

func CreateSpecialContext

func CreateSpecialContext(r SpecialContextResource) Context

func NewContext

func NewContext(ctx *gin.Context) Context

type HandlerFunc

type HandlerFunc func(c Context)

func AliasForRecordMetrics

func AliasForRecordMetrics(path string) HandlerFunc

AliasForRecordMetrics 对请求uri起个别名,用于prometheus记录指标。 如:Get /user/:username 这样的uri,因为username会有非常多的情况,这样记录prometheus指标会非常的不有好。

type IMux

type IMux interface {
	http.Handler
	GetEngine() *gin.Engine
	Group(relativePath string, handlers ...HandlerFunc) RouterGroup
}

IMux http Mux

type IRoutes

type IRoutes interface {
	Any(string, ...HandlerFunc)
	GET(string, ...HandlerFunc)
	POST(string, ...HandlerFunc)
	DELETE(string, ...HandlerFunc)
	PATCH(string, ...HandlerFunc)
	PUT(string, ...HandlerFunc)
	OPTIONS(string, ...HandlerFunc)
	HEAD(string, ...HandlerFunc)
}

IRoutes 包装gin的IRoutes

type Mux

type Mux struct {
	Engine *gin.Engine
}

func (*Mux) GetEngine

func (m *Mux) GetEngine() *gin.Engine

func (*Mux) Group

func (m *Mux) Group(relativePath string, handlers ...HandlerFunc) RouterGroup

func (*Mux) ServeHTTP

func (m *Mux) ServeHTTP(w http.ResponseWriter, req *http.Request)

type OnPanicNotify

type OnPanicNotify func(ctx Context, err interface{}, stackInfo string)

OnPanicNotify 发生panic时通知用

type Option

type Option struct {
	DisablePProf      bool
	DisableSwagger    bool
	DisablePrometheus bool
	PanicNotify       OnPanicNotify
	RecordMetrics     RecordMetrics
	EnableCors        bool
	EnableRate        bool
}

type OptionHandler

type OptionHandler func(*Option)

func WithDisablePProf

func WithDisablePProf() OptionHandler

WithDisablePProf 禁用 pprof

func WithDisablePrometheus

func WithDisablePrometheus() OptionHandler

WithDisablePrometheus 禁用prometheus

func WithDisableSwagger

func WithDisableSwagger() OptionHandler

WithDisableSwagger 禁用 swagger

func WithEnableCors

func WithEnableCors() OptionHandler

WithEnableCors 开启CORS

func WithEnableRate

func WithEnableRate() OptionHandler

func WithRecordMetrics

func WithRecordMetrics(record RecordMetrics) OptionHandler

WithRecordMetrics 设置记录prometheus记录指标回调

type RecordMetrics

type RecordMetrics func(method, uri string, success bool, httpCode, businessCode int, costSeconds float64, traceID string)

RecordMetrics 记录prometheus指标用 如果使用AliasForRecordMetrics配置了别名,uri将被替换为别名。

type Resource

type Resource struct {
	Logger              *zap.Logger
	ProjectListen       string
	Env                 string
	HeaderLoginToken    string
	HeaderSignToken     string
	HeaderSignTokenDate string
}

type RouterGroup

type RouterGroup interface {
	Group(string, ...HandlerFunc) RouterGroup
	IRoutes
}

RouterGroup 包装gin的RouterGroup

type SpecialContextResource

type SpecialContextResource struct {
	UserID   int64
	UserName string
	TenantID int64
	IsAdmin  bool
	RoleType int32
}

type StdContext

type StdContext struct {
	Cancel stdctx.CancelFunc
	stdctx.Context
	Trace
	*zap.Logger
}

func GetRequestContext

func GetRequestContext(timeout ...int) *StdContext

type Trace

type Trace = trace.T

Jump to

Keyboard shortcuts

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