release: bump version to 0.3.0
- Refactor Redis backend connection handling and pool management - Update algorithm implementations with improved type annotations - Enhance config loader validation with stricter Pydantic schemas - Improve decorator and middleware error handling - Expand example scripts with better docstrings and usage patterns - Add new 00_basic_usage.py example for quick start - Reorganize examples directory structure - Fix type annotation inconsistencies across core modules - Update dependencies in pyproject.toml
This commit is contained in:
148
docs/index.rst
Normal file
148
docs/index.rst
Normal file
@@ -0,0 +1,148 @@
|
||||
FastAPI Traffic
|
||||
===============
|
||||
|
||||
**Production-grade rate limiting for FastAPI that just works.**
|
||||
|
||||
.. image:: https://img.shields.io/badge/python-3.10+-blue.svg
|
||||
:target: https://www.python.org/downloads/
|
||||
|
||||
.. image:: https://img.shields.io/badge/license-Apache%202.0-green.svg
|
||||
:target: https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
----
|
||||
|
||||
FastAPI Traffic is a rate limiting library designed for real-world FastAPI applications.
|
||||
It gives you five battle-tested algorithms, three storage backends, and a clean API that
|
||||
stays out of your way.
|
||||
|
||||
Whether you're building a public API that needs to handle thousands of requests per second
|
||||
or a small internal service that just needs basic protection, this library has you covered.
|
||||
|
||||
Quick Example
|
||||
-------------
|
||||
|
||||
Here's how simple it is to add rate limiting to your FastAPI app:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from fastapi import FastAPI, Request
|
||||
from fastapi_traffic import rate_limit
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
@app.get("/api/users")
|
||||
@rate_limit(100, 60) # 100 requests per minute
|
||||
async def get_users(request: Request):
|
||||
return {"users": ["alice", "bob"]}
|
||||
|
||||
That's it. Your endpoint is now rate limited. Clients get helpful headers telling them
|
||||
how many requests they have left, and when they can try again if they hit the limit.
|
||||
|
||||
Why FastAPI Traffic?
|
||||
--------------------
|
||||
|
||||
Most rate limiting libraries fall into one of two camps: either they're too simple
|
||||
(fixed window only, no persistence) or they're way too complicated (requires reading
|
||||
a 50-page manual just to get started).
|
||||
|
||||
We tried to hit the sweet spot:
|
||||
|
||||
- **Five algorithms** — Pick the one that fits your use case. Token bucket for burst
|
||||
handling, sliding window for precision, fixed window for simplicity.
|
||||
|
||||
- **Three backends** — Memory for development, SQLite for single-node production,
|
||||
Redis for distributed systems.
|
||||
|
||||
- **Works how you'd expect** — Decorator for endpoints, middleware for global limits,
|
||||
dependency injection if that's your style.
|
||||
|
||||
- **Fully async** — Built from the ground up for async Python. No blocking calls,
|
||||
no thread pool hacks.
|
||||
|
||||
- **Type-checked** — Full type hints throughout. Works great with pyright and mypy.
|
||||
|
||||
What's in the Box
|
||||
-----------------
|
||||
|
||||
.. grid:: 2
|
||||
:gutter: 3
|
||||
|
||||
.. grid-item-card:: 🚦 Rate Limiting
|
||||
:link: getting-started/quickstart
|
||||
:link-type: doc
|
||||
|
||||
Decorator-based rate limiting with sensible defaults.
|
||||
|
||||
.. grid-item-card:: 🔧 Algorithms
|
||||
:link: user-guide/algorithms
|
||||
:link-type: doc
|
||||
|
||||
Token bucket, sliding window, fixed window, leaky bucket, and more.
|
||||
|
||||
.. grid-item-card:: 💾 Backends
|
||||
:link: user-guide/backends
|
||||
:link-type: doc
|
||||
|
||||
Memory, SQLite, and Redis storage options.
|
||||
|
||||
.. grid-item-card:: ⚙️ Configuration
|
||||
:link: user-guide/configuration
|
||||
:link-type: doc
|
||||
|
||||
Load settings from environment variables or config files.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Getting Started
|
||||
:hidden:
|
||||
|
||||
getting-started/installation
|
||||
getting-started/quickstart
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: User Guide
|
||||
:hidden:
|
||||
|
||||
user-guide/algorithms
|
||||
user-guide/backends
|
||||
user-guide/middleware
|
||||
user-guide/configuration
|
||||
user-guide/key-extractors
|
||||
user-guide/exception-handling
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Advanced Topics
|
||||
:hidden:
|
||||
|
||||
advanced/distributed-systems
|
||||
advanced/performance
|
||||
advanced/testing
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: API Reference
|
||||
:hidden:
|
||||
|
||||
api/decorator
|
||||
api/middleware
|
||||
api/algorithms
|
||||
api/backends
|
||||
api/config
|
||||
api/exceptions
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:caption: Project
|
||||
:hidden:
|
||||
|
||||
changelog
|
||||
contributing
|
||||
|
||||
Indices and tables
|
||||
------------------
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
Reference in New Issue
Block a user