HTTP Server API Reference¶
Complete API documentation for Blueprint's HTTP server framework built on Gin with integrated middleware components.
Core Server API¶
ServerConfig¶
Configuration structure for HTTP server settings:
type ServerConfig struct {
Host string `json:"host"` // Server bind address (default: "")
Port int `json:"port"` // Server port (default: 5000)
ReadTimeout int `json:"readTimeout"` // Read timeout in seconds (default: 600)
WriteTimeout int `json:"writeTimeout"` // Write timeout in seconds (default: 600)
Debug bool `json:"debug"` // Enable debug mode (default: false)
Options map[string]string `json:"options"` // Additional server options
tlsProvider.ServerConfig // TLS configuration
}
Configuration Methods¶
Creates a new server configuration with default values. Retrieves option value by key, returns defaultValue if not found. Validates the server configuration (currently returns nil). Creates a new server instance using this configuration.Default Values¶
const (
ServerDefaultReadTimeout = 600 // 10 minutes
ServerDefaultWriteTimeout = 600 // 10 minutes
ServerDefaultPort = 5000 // Default port
ServerDefaultName = "http" // Default server name
)
Configuration Options¶
The Options
map supports these predefined keys:
const (
OptAuthTokenHeader = "authTokenHeader" // Custom auth header name
OptAuthTokenSecret = "authTokenSecret" // Auth token secret
OptDefaultSecurityHeaders = "defaultSecurityHeaders" // Enable default security headers
)
Note: 'authTokenHeader' and 'authTokenSecret' will be used to configure automatically simple token-based auth if ProcessOptions() is called; if no 'authTokenHeader' is specified, a default value is used
Example:
config := NewServerConfig()
config.Host = "localhost"
config.Port = 8080
config.Debug = true
config.Options["authTokenSecret"] = "my-secret-key"
config.Options["defaultSecurityHeaders"] = "true"
Server¶
Main server structure providing HTTP functionality:
type Server struct {
Config *ServerConfig // Server configuration
Router *gin.Engine // Gin router instance
Server *http.Server // Underlying HTTP server
Logger *log.Logger // Structured logger
}
Server Creation¶
Creates a new HTTP server instance.Parameters:
- cfg
: Server configuration (nil uses defaults)
- logger
: Logger instance (nil creates default HTTP logger)
Returns: - Configured Server instance with Gin router and HTTP server - Error if configuration validation fails
Example:
config := NewServerConfig()
config.Port = 8080
logger := log.New("api-server")
server, err := NewServer(config, logger)
if err != nil {
log.Fatal(err)
}
Server Lifecycle¶
Starts the HTTP server (blocking call).- Uses TLS if
TLSConfig
is configured - Returns
nil
when gracefully shut down - Returns error for startup failures
Parameters:
- ctx
: Context for shutdown timeout control
Example:
// Start server in goroutine
go func() {
if err := server.Start(); err != nil {
logger.Error(err, "server failed")
}
}()
// Graceful shutdown
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
logger.Error(err, "shutdown failed")
}
Router Access¶
Returns the underlying Gin router for direct access. Creates a new router group with the specified base path.Example:
// Direct router access
server.Route().GET("/health", healthHandler)
// Router groups
api := server.Group("/api/v1")
api.GET("/users", getUsersHandler)
api.POST("/users", createUserHandler)
admin := server.Group("/admin")
admin.GET("/stats", adminStatsHandler)
Middleware Management¶
Adds middleware to the server's router.Example:
// Custom middleware
server.AddMiddleware(func(c *gin.Context) {
c.Header("X-Custom-Header", "value")
c.Next()
})
// Third-party middleware
server.AddMiddleware(cors.Default())
Options Processing¶
Processes server options and applies configuration-based middleware.Automatic Processing:
- OptDefaultSecurityHeaders
: Applies default security headers if "true" or "1"
- OptAuthTokenSecret
: Sets up token authentication with optional custom header
Example:
config.Options["defaultSecurityHeaders"] = "true"
config.Options["authTokenSecret"] = "my-api-key"
config.Options["authTokenHeader"] = "X-API-Key"
server, _ := NewServer(config, logger)
err := server.ProcessOptions() // Applies security headers and auth
Router Creation¶
Creates a new Gin router with standardized configuration.Features:
- Sets release mode for production (!debug
)
- Adds structured HTTP logging middleware
- Includes recovery middleware
- Configures error logging wrapper
Example:
Middleware API¶
Authentication Middleware¶
Registers authentication middleware with the specified provider.Parameters:
- provider
: Authentication provider implementing CanAccess(c *gin.Context) bool
Example:
// Token authentication
tokenAuth := auth.NewAuthToken("X-API-Key", "secret-key")
server.UseAuth(tokenAuth)
// JWT authentication
jwtAuth := auth.NewAuthJWT(jwtProvider)
server.UseAuth(jwtAuth)
Security Middleware¶
Adds security headers middleware with custom configuration. Adds security headers middleware with default configuration. Adds CSRF protection middleware.Example:
// Custom security configuration
securityConfig := &security.SecurityConfig{
CSP: "default-src 'self'",
HSTS: "max-age=31536000",
FrameOptions: "DENY",
}
server.UseSecurityHeaders(securityConfig)
// Default security headers
server.UseDefaultSecurityHeaders()
// CSRF protection
server.UseCSRFProtection()
Rate Limiting¶
Adds rate limiting middleware.Parameters:
- ratePerMinute
: Maximum requests per minute per IP
- Uses burst size of 5 requests
Example:
Session Management¶
func (s *Server) UseSession(config *session.Config, backend kv.KV, logger *log.Logger) *session.SessionManager
Parameters:
- config
: Session configuration (nil uses defaults)
- backend
: KV storage backend (memory, Redis, or custom)
- logger
: Logger for session operations
Returns: - SessionManager instance for additional session operations
Example:
// Memory-based sessions
backend := kv.NewMemoryKV()
sessionConfig := session.NewConfig()
manager := server.UseSession(sessionConfig, backend, logger)
// Redis-based sessions
redisBackend, _ := redis.NewClient(redisConfig)
manager := server.UseSession(sessionConfig, redisBackend, logger)
Response Helper API¶
Standard Response Types¶
type JSONResponse struct {
Success bool `json:"success"`
Data interface{} `json:"data,omitempty"`
}
type JSONResponseError struct {
Success bool `json:"success"`
Error ErrorDetail `json:"error"`
}
type ErrorDetail struct {
Message string `json:"message,omitempty"`
RequestError interface{} `json:"requestError,omitempty"`
}
Error Response Functions¶
All response functions automatically detect JSON requests and return appropriate responses.
Generates 401 Unauthorized response with logging. Generates 403 Forbidden response with logging. Generates 404 Not Found response with logging. Generates 400 Bad Request response with custom message. Generates 429 Too Many Requests response. Generates 500 Internal Server Error response with error logging. Generates 400 Bad Request response for validation failures.JSON Response Example:
Usage Example:
func protectedHandler(c *gin.Context) {
token := c.GetHeader("Authorization")
if token == "" {
response.Http401(c)
return
}
user, err := getUserFromToken(token)
if err != nil {
response.Http500(c, err)
return
}
c.JSON(200, response.JSONResponse{
Success: true,
Data: user,
})
}
Complete Server Setup Example¶
check Blueprint samples