request

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Feb 27, 2026 License: MIT Imports: 8 Imported by: 0

README

request — HTTP 请求工具

提供 HTTP 客户端封装、请求 ID 生成器与常用请求/响应工具函数。

主要功能

请求 ID 生成器
import "github.com/leeforge/framework/request"

gen := request.NewRequestIDGenerator("req")

// 生成唯一 ID(前缀 + 随机 hex)
id := gen.Generate() // "req-a3f2b1c9d4e5..."
HTTP 客户端
// 创建客户端(带超时、重试)
client := request.NewClient(request.ClientConfig{
    BaseURL:    "https://api.example.com",
    Timeout:    30 * time.Second,
    MaxRetries: 3,
})

// GET 请求
resp, err := client.Get(ctx, "/users/123", nil)

// POST 请求(自动 JSON 序列化)
resp, err := client.Post(ctx, "/users", map[string]any{
    "name": "Alice",
    "email": "alice@example.com",
})

// 携带自定义 Header
resp, err := client.WithHeader("X-API-Key", apiKey).Get(ctx, "/data", nil)
请求上下文工具
// 从请求中提取 TraceID(来自 X-Trace-ID 头)
traceID := request.GetTraceID(r)

// 从请求中提取用户 ID(由 AuthMiddleware 注入)
userID := request.GetUserID(r.Context())

// 获取客户端真实 IP(处理代理头)
ip := request.GetClientIP(r)

在 Handler 中使用

func (h *Handler) ProxyRequest(w http.ResponseWriter, r *http.Request) {
    traceID := request.GetTraceID(r)

    resp, err := h.client.
        WithHeader("X-Trace-ID", traceID).
        Get(r.Context(), "/downstream", nil)
    if err != nil {
        // 处理错误
        return
    }
    // 转发响应...
}

注意事项

  • 客户端默认开启连接池复用,建议复用同一个 Client 实例
  • 超时设置适用于整个请求周期(连接 + 传输),需根据下游服务 SLA 合理配置

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenerateCorrelationID

func GenerateCorrelationID() string

GenerateCorrelationID generates a correlation ID

func GenerateShortID

func GenerateShortID(length int) string

GenerateShortID generates a short unique ID

func GenerateSpanID

func GenerateSpanID() string

GenerateSpanID generates a span ID

func GenerateTraceID

func GenerateTraceID() string

GenerateTraceID generates a trace ID

func MiddlewareChain

func MiddlewareChain(middlewares ...func(http.Handler) http.Handler) func(http.Handler) http.Handler

MiddlewareChain creates a middleware chain for request handling

Types

type LoggerInterface

type LoggerInterface interface {
	Info(msg string, fields ...interface{})
	Debug(msg string, fields ...interface{})
	Error(msg string, fields ...interface{})
	WithField(key string, value interface{}) interface{}
}

LoggerInterface defines the interface for logging

type RequestContext

type RequestContext struct {
	RequestID     string
	TraceID       string
	SpanID        string
	CorrelationID string
	UserID        string
	TenantID      string
	IPAddress     string
	UserAgent     string
	Method        string
	Path          string
	Timestamp     time.Time
	Metadata      map[string]string
}

RequestContext represents the request context with tracing information

func FromContext

func FromContext(ctx context.Context) *RequestContext

FromContext extracts request context from context.Context

func FromHTTPRequest

func FromHTTPRequest(r *http.Request) *RequestContext

FromHTTPRequest extracts request context from HTTP request

func NewRequestContext

func NewRequestContext() *RequestContext

NewRequestContext creates a new request context

func (*RequestContext) String

func (rc *RequestContext) String() string

String returns a string representation of the request context

func (*RequestContext) ToContext

func (rc *RequestContext) ToContext() context.Context

ToContext converts request context to context.Context

func (*RequestContext) ToHeaders

func (rc *RequestContext) ToHeaders() http.Header

ToHeaders converts request context to HTTP headers

type RequestCorrelation

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

RequestCorrelation correlates requests across services

func NewRequestCorrelation

func NewRequestCorrelation(enabled bool) *RequestCorrelation

NewRequestCorrelation creates a new request correlator

func (*RequestCorrelation) Correlate

func (rc *RequestCorrelation) Correlate(ctx context.Context, req *http.Request) *http.Request

Correlate adds correlation headers to an outgoing request

type RequestIDConfig

type RequestIDConfig struct {
	Prefix      string
	Length      int
	EnableTrace bool
}

RequestIDConfig represents the configuration for request ID generation

func DefaultRequestIDConfig

func DefaultRequestIDConfig() RequestIDConfig

DefaultRequestIDConfig creates a default configuration

type RequestIDEnricher

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

RequestIDEnricher enriches request context with additional information

func DefaultRequestIDEnricher

func DefaultRequestIDEnricher() *RequestIDEnricher

DefaultRequestIDEnricher creates a default enricher

func NewRequestIDEnricher

func NewRequestIDEnricher() *RequestIDEnricher

NewRequestIDEnricher creates a new enricher

func (*RequestIDEnricher) AddField

func (e *RequestIDEnricher) AddField(name string, extractor func(*http.Request) string)

AddField adds a field to be enriched

func (*RequestIDEnricher) Enrich

func (e *RequestIDEnricher) Enrich(rc *RequestContext, r *http.Request)

Enrich enriches a request context

type RequestIDExtractor

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

RequestIDExtractor extracts request IDs from various sources

func NewRequestIDExtractor

func NewRequestIDExtractor(sources ...string) *RequestIDExtractor

NewRequestIDExtractor creates a new extractor

func (*RequestIDExtractor) Extract

func (e *RequestIDExtractor) Extract(r *http.Request) string

Extract extracts request ID from HTTP request

type RequestIDGenerator

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

RequestIDGenerator generates unique request IDs

func NewRequestIDGenerator

func NewRequestIDGenerator(prefix string) *RequestIDGenerator

NewRequestIDGenerator creates a new request ID generator

func (*RequestIDGenerator) Generate

func (g *RequestIDGenerator) Generate() string

Generate generates a unique request ID

type RequestIDGeneratorFactory

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

RequestIDGeneratorFactory creates request ID generators

func NewRequestIDGeneratorFactory

func NewRequestIDGeneratorFactory() *RequestIDGeneratorFactory

NewRequestIDGeneratorFactory creates a new factory

func (*RequestIDGeneratorFactory) GetGenerator

func (f *RequestIDGeneratorFactory) GetGenerator(prefix string) *RequestIDGenerator

GetGenerator gets or creates a generator

type RequestIDManager

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

RequestIDManager manages request ID generation and tracking

func NewRequestIDManager

func NewRequestIDManager(config RequestIDConfig) *RequestIDManager

NewRequestIDManager creates a new request ID manager

func (*RequestIDManager) Generate

func (m *RequestIDManager) Generate() string

Generate generates a new request ID

func (*RequestIDManager) GenerateWithTrace

func (m *RequestIDManager) GenerateWithTrace() (requestID, traceID, spanID string)

GenerateWithTrace generates a request ID with trace information

type RequestIDMiddleware

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

RequestIDMiddleware adds request ID to all incoming requests

func NewRequestIDMiddleware

func NewRequestIDMiddleware(prefix string) *RequestIDMiddleware

NewRequestIDMiddleware creates a new request ID middleware

func (*RequestIDMiddleware) Middleware

func (m *RequestIDMiddleware) Middleware(next http.Handler) http.Handler

Middleware wraps an HTTP handler with request ID generation

type RequestIDValidator

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

RequestIDValidator validates request IDs

func NewRequestIDValidator

func NewRequestIDValidator(pattern string) *RequestIDValidator

NewRequestIDValidator creates a new request ID validator

func (*RequestIDValidator) Validate

func (v *RequestIDValidator) Validate(requestID string) bool

Validate validates a request ID

type RequestLogger

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

RequestLogger logs request information

func NewRequestLogger

func NewRequestLogger(logger LoggerInterface) *RequestLogger

NewRequestLogger creates a new request logger

func (*RequestLogger) Middleware

func (l *RequestLogger) Middleware(next http.Handler) http.Handler

Middleware wraps an HTTP handler with request logging

type RequestThrottler

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

RequestThrottler throttles requests

func NewRequestThrottler

func NewRequestThrottler(limit int, window time.Duration) *RequestThrottler

NewRequestThrottler creates a new request throttler

func (*RequestThrottler) Allow

func (t *RequestThrottler) Allow(key string) bool

Allow checks if a request is allowed

func (*RequestThrottler) GetRemaining

func (t *RequestThrottler) GetRemaining(key string) int

GetRemaining gets remaining requests

type RequestTracer

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

RequestTracer traces requests

func NewRequestTracer

func NewRequestTracer(tracer TracerInterface) *RequestTracer

NewRequestTracer creates a new request tracer

func (*RequestTracer) Middleware

func (t *RequestTracer) Middleware(next http.Handler) http.Handler

Middleware wraps an HTTP handler with request tracing

type RequestValidator

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

RequestValidator validates requests

func NewRequestValidator

func NewRequestValidator(validator ValidatorInterface) *RequestValidator

NewRequestValidator creates a new request validator

func (*RequestValidator) Validate

func (v *RequestValidator) Validate(body interface{}) error

Validate validates a request body

type TracerInterface

type TracerInterface interface {
	Start(ctx context.Context, name string, opts ...interface{}) (context.Context, interface{})
	End(span interface{}, err error)
	SetAttributes(span interface{}, attrs map[string]interface{})
}

TracerInterface defines the interface for tracing

type ValidatorInterface

type ValidatorInterface interface {
	ValidateStruct(interface{}) error
}

ValidatorInterface defines the interface for validation

Jump to

Keyboard shortcuts

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