Skip to content

Conversation

vishr
Copy link
Member

@vishr vishr commented Sep 16, 2025

Summary

Addresses issue #2745 by providing comprehensive documentation for the ContextTimeout middleware, which was completely undocumented despite being the recommended approach for handling request timeouts in Echo.

Problem Solved

Users were confused because:

  • ContextTimeout middleware exists but has zero documentation
  • Website only documents the deprecated Timeout middleware (with warnings against it)
  • No examples showing how to properly implement handlers that work with ContextTimeout
  • No explanation of why ContextTimeout is preferred over Timeout

Changes

📚 Comprehensive Configuration Documentation

Overview & Key Differences:

  • Clear explanation of ContextTimeout vs deprecated Timeout middleware
  • Safety benefits: no response writer interference, no data races
  • Cooperative cancellation model explanation

Configuration Examples (3 scenarios):

  • Basic usage: middleware.ContextTimeout(30 * time.Second)
  • Custom error handling with JSON responses
  • Route-specific timeout skipping for health checks

🛠️ Practical Handler Examples

3 Detailed Real-World Scenarios:

  1. Database Operations: Context-aware SQL queries with proper error handling
  2. Long-Running Processing: Goroutine-based operations with select statements
  3. HTTP Proxy/Client: Outbound requests with context propagation

📖 Best Practices & Patterns

Common Integration Patterns:

  • Database: db.QueryContext(ctx, query, args...)
  • HTTP Client: http.NewRequestWithContext(ctx, method, url, body)
  • Redis: redisClient.Get(ctx, key)
  • CPU-intensive loops with ctx.Done() checking

Practical Guidelines:

  • Recommended timeout values for different use cases
  • How to handle context cancellation gracefully
  • When and where to place the middleware

🔧 Enhanced Field Documentation

  • Skipper: Examples for excluding health check endpoints
  • ErrorHandler: Custom timeout response patterns with JSON
  • Timeout: Recommended durations for APIs, uploads, background tasks

🚀 Function Documentation

  • ContextTimeout(): Basic usage with handler requirements
  • ContextTimeoutWithConfig(): Advanced configuration examples
  • ToMiddleware(): Validation and error handling scenarios

Impact

This documentation addresses the exact concerns raised in issue #2745:

  1. "Cannot find any mention of ContextTimeout middleware" → Now has 280+ lines of comprehensive docs
  2. "Documentation only lists the recommended-against Timeout middleware" → Clear explanation of why ContextTimeout is preferred
  3. "Usage example showing what the handler should look like" → 3 detailed handler examples + common patterns

Before/After

Before: Zero documentation, users confused about which timeout middleware to use
After: Enterprise-grade documentation with practical examples and best practices

Testing

  • ✅ All existing ContextTimeout tests pass
  • ✅ Code compiles without issues
  • ✅ Documentation follows Go conventions
  • ✅ Examples are syntactically correct and functional

Fixes #2745


This PR complements PR #2818 (Logger middleware documentation) as part of ongoing efforts to improve Echo's middleware documentation quality.

vishr and others added 2 commits September 15, 2025 19:30
…xamples

Addresses issue #2665 by providing comprehensive documentation for the Logger
middleware including:

**Configuration Examples:**
- Basic usage with default settings
- Custom simple and JSON formats
- Custom time formatting
- Header, query, form, and cookie logging
- File output configuration
- Custom tag functions
- Conditional logging with Skipper
- External logging service integration

**Detailed Tag Reference:**
- Complete list of all available tags (time, request, response, dynamic)
- Clear explanations of each tag's purpose and format
- Examples showing proper usage

**Enhanced Field Documentation:**
- Detailed descriptions for all LoggerConfig fields
- Examples for each configuration option
- Default values and behavior

**Troubleshooting Section:**
- Common issues and solutions
- Performance optimization tips
- Best practices for high-traffic applications

**Function Documentation:**
- Enhanced Logger() and LoggerWithConfig() documentation
- Example outputs and usage patterns

This makes the Logger middleware much more accessible to new users while
providing advanced configuration guidance for experienced developers.

Fixes #2665

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
Addresses issue #2745 by providing complete documentation for the ContextTimeout
middleware, which was previously undocumented despite being the recommended
approach over the deprecated Timeout middleware.

**Documentation Added:**

**Overview & Key Differences:**
- Clear explanation of why ContextTimeout is preferred over Timeout middleware
- Highlights safety improvements (no response writer interference, no data races)
- Explains cooperative cancellation model

**Configuration Examples:**
- Basic usage with simple timeout
- Custom error handling for timeout responses
- Route-specific skipping with Skipper
- Advanced configuration patterns

**Handler Examples (3 detailed scenarios):**
- Context-aware database queries with proper error handling
- Long-running operations using goroutines and select statements
- HTTP client requests with context propagation

**Best Practices & Common Patterns:**
- Database operations: `db.QueryContext(ctx, ...)`
- HTTP requests: `http.NewRequestWithContext(ctx, ...)`
- Redis operations: `client.Get(ctx, key)`
- CPU-intensive loops with context checking

**Enhanced Field Documentation:**
- Detailed explanations for Skipper, ErrorHandler, and Timeout fields
- Examples for each configuration option
- Recommended timeout values for different use cases

**Function Documentation:**
- Comprehensive ContextTimeout() documentation with usage examples
- Enhanced ContextTimeoutWithConfig() with advanced patterns
- ToMiddleware() method documentation for validation scenarios

This resolves user confusion about which timeout middleware to use and
provides practical examples showing how handlers should be implemented
to work effectively with context-based timeouts.

Fixes #2745

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
@vishr vishr requested a review from aldas September 16, 2025 02:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ContextTimeout Middleware is undocumented
1 participant