{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/api-evangelist/gin/json-schema/gin-configuration.json", "title": "Gin Router and Middleware Configuration", "description": "JSON Schema for Gin web framework router engine configuration and common middleware settings.", "type": "object", "properties": { "mode": { "type": "string", "enum": ["debug", "release", "test"], "default": "debug", "description": "Gin mode (set via GIN_MODE env var or gin.SetMode())." }, "redirectTrailingSlash": { "type": "boolean", "default": true, "description": "Redirect /foo/ to /foo or vice versa." }, "redirectFixedPath": { "type": "boolean", "default": false, "description": "Try to fix and redirect the request path." }, "handleMethodNotAllowed": { "type": "boolean", "default": false, "description": "Return 405 instead of 404 for mismatched methods." }, "forwardedByClientIP": { "type": "boolean", "default": true, "description": "Parse client IP from X-Forwarded-For / X-Real-IP." }, "useRawPath": { "type": "boolean", "default": false, "description": "Use url.RawPath for route matching." }, "unescapePathValues": { "type": "boolean", "default": true, "description": "Unescape path values for matching." }, "removeExtraSlash": { "type": "boolean", "default": false, "description": "Remove extra slashes from URL path." }, "maxMultipartMemory": { "type": "integer", "default": 33554432, "description": "Maximum memory for multipart forms in bytes (default 32MB)." }, "trustedPlatform": { "type": "string", "description": "Trusted platform header (e.g., X-Forwarded-For)." }, "trustedProxies": { "type": "array", "items": { "type": "string" }, "description": "List of trusted proxy CIDR ranges." }, "middleware": { "type": "object", "properties": { "logger": { "type": "object", "properties": { "enabled": { "type": "boolean", "default": true, "description": "Enable request logging middleware." }, "formatter": { "type": "string", "description": "Custom log format string." }, "output": { "type": "string", "description": "Log output destination." }, "skipPaths": { "type": "array", "items": { "type": "string" }, "description": "Paths to skip logging." } } }, "recovery": { "type": "object", "properties": { "enabled": { "type": "boolean", "default": true, "description": "Enable panic recovery middleware." } } }, "cors": { "type": "object", "properties": { "allowOrigins": { "type": "array", "items": { "type": "string" }, "default": ["*"], "description": "Allowed origins." }, "allowMethods": { "type": "array", "items": { "type": "string" }, "description": "Allowed HTTP methods." }, "allowHeaders": { "type": "array", "items": { "type": "string" }, "description": "Allowed request headers." }, "exposeHeaders": { "type": "array", "items": { "type": "string" }, "description": "Headers exposed to the client." }, "allowCredentials": { "type": "boolean", "default": false, "description": "Allow credentials." }, "maxAge": { "type": "integer", "description": "Preflight cache duration in seconds." } } }, "rateLimiter": { "type": "object", "properties": { "enabled": { "type": "boolean", "default": false, "description": "Enable rate limiting middleware." }, "limit": { "type": "integer", "description": "Maximum requests per period." }, "period": { "type": "string", "description": "Rate limit period duration." } } } }, "description": "Common middleware configuration." } } }