Souin is an HTTP caching reverse proxy/middleware compliant with RFC 7234 and related standards. It functions as a pluggable cache layer for various web frameworks (Gin, Echo, Fiber, etc.) and reverse proxies (Caddy, Traefik, Tyk), providing features like request coalescing, surrogate key-based tagging, stale-while-revalidate, and multiple storage backends. The architecture centers on a core middleware handler (`pkg/middleware`) that processes requests through a chain of caching logic, utilizing context propagation for request-scoped values and a pluggable storage system. Key entry points include framework-specific adapter files (e.g., `plugins/gin/souin.go`) and the standalone `main.go` server. Data flows involve intercepting HTTP requests, checking cache storage (in-memory or external like Redis/Badger), serving cached responses or forwarding to upstream, and optionally caching responses based on configuration. External dependencies include Go standard libraries, third-party packages for specific frameworks/storage drivers, and tools like Docker and GoReleaser for deployment.
This repository is a collection of standalone example applications demonstrating features of the Gin web framework for Go. It includes over 30 examples covering routing, middleware, authentication, file uploads, WebSocket, server-sent events, gRPC integration, OpenTelemetry, and more. Each example is a self-contained Go program with its own main.go and dependencies. The codebase serves as a learning resource and reference for Gin patterns, but is not a cohesive production system. Many examples are simple and straightforward, though some demonstrate non-trivial patterns like rate limiting, struct-level validation, and concurrent room management.