- Simple API - Minimal boilerplate with decorators
- Beautiful Logging - Colorful request/response logs with timing
- Async Support - Built on httpx for high performance
- Type Safe - Full type annotations with Pydantic support
- All HTTP Methods - GET, POST, PUT, PATCH, DELETE
- Middleware - Request/response interception and modification
- Rate Limiting - Multiple strategies (token bucket, leaky bucket, etc.)
- HTTP/2 Support - Optional HTTP/2 protocol support
- Request Info - Access to request details from response object
pip install fasthttp-clientfrom fasthttp import FastHTTP
from fasthttp.response import Response
app = FastHTTP()
@app.get(url="https://httpbin.org/get")
async def get_data(resp: Response):
return resp.json()
if __name__ == "__main__":
app.run()Output:
16:09:18.955 │ INFO │ fasthttp │ ✔ FastHTTP started
16:09:19.519 │ INFO │ fasthttp │ ✔ ← GET https://httpbin.org/get [200] 458.26ms
16:09:20.037 │ INFO │ fasthttp │ ✔ Done in 1.08s
Enable HTTP/2 for better performance with servers that support it:
from fasthttp import FastHTTP
from fasthttp.response import Response
app = FastHTTP(http2=True)
@app.get(url="https://www.google.com/")
async def get_google(resp: Response):
print(f"Status: {resp.status}")
return resp.status
if __name__ == "__main__":
app.run()Note: Install with pip install fasthttp-client[http2] for HTTP/2 support. HTTP/2 works with servers like Google, GitHub, YouTube, and many others. Servers that don't support HTTP/2 will automatically fall back to HTTP/1.1.
Control request rate with multiple strategies:
from fasthttp import FastHTTP, RateLimitConfig
from fasthttp.response import Response
app = FastHTTP(
rate_limit={
"enabled": True,
"strategy": "token_bucket",
"requests_per_second": 10,
"burst": 20,
}
)
@app.get(url="https://api.example.com/data")
async def get_data(resp: Response):
return resp.json()
if __name__ == "__main__":
app.run()Available strategies: token_bucket, leaky_bucket, fixed_window, sliding_window.
Add custom logic to requests and responses:
from fasthttp import FastHTTP
from fasthttp.middleware import BaseMiddleware
class LoggingMiddleware(BaseMiddleware):
async def before_request(self, route, config):
print(f"Sending {route.method} to {route.url}")
return config
app = FastHTTP(middleware=[LoggingMiddleware()])
@app.get(url="https://api.example.com/data")
async def get_data(resp):
return resp.json()
if __name__ == "__main__":
app.run()- Documentation (EN) - Complete guide (English)
- Documentation (RU) - Полное руководство (Русский)
- Quick Start - Get started in 2 minutes
- API Reference - Full API documentation
- Examples - Real-world examples
- Configuration - Advanced settings
- Middleware - Request/response interception
- Pydantic Validation - Type-safe validation
- HTTP/2 Support - HTTP/2 protocol support
MIT License - see LICENSE file for details.
See CONTRIBUTING.md for contribution guidelines.
See SECURITY.md for security policies.
