.. _fastapi-redis-example: FastAPI + Redis example ======================= .. meta:: :keywords: Python,Dependency Injection,FastAPI,Redis,Example :description: This example demonstrates a usage of the FastAPI, Redis, and Dependency Injector. This example shows how to use ``Dependency Injector`` with `FastAPI `_ and `Redis `_. The source code is available on the `Github `_. Application structure --------------------- Application has next structure: .. code-block:: bash ./ ├── fastapiredis/ │ ├── __init__.py │ ├── application.py │ ├── containers.py │ ├── redis.py │ ├── services.py │ └── tests.py ├── docker-compose.yml ├── Dockerfile └── requirements.txt Redis ----- Module ``redis`` defines Redis connection pool initialization and shutdown. See ``fastapiredis/redis.py``: .. literalinclude:: ../../examples/miniapps/fastapi-redis/fastapiredis/redis.py :language: python Service ------- Module ``services`` contains example service. Service has a dependency on Redis connection pool. It uses it for getting and setting a key asynchronously. Real life service will do something more meaningful. See ``fastapiredis/services.py``: .. literalinclude:: ../../examples/miniapps/fastapi-redis/fastapiredis/services.py :language: python Container --------- Declarative container wires example service with Redis connection pool. See ``fastapiredis/containers.py``: .. literalinclude:: ../../examples/miniapps/fastapi-redis/fastapiredis/containers.py :language: python Application ----------- Module ``application`` creates ``FastAPI`` app, setup endpoint, and init container. Endpoint ``index`` has a dependency on example service. The dependency is injected using :ref:`wiring` feature. Listing of ``fastapiredis/application.py``: .. literalinclude:: ../../examples/miniapps/fastapi-redis/fastapiredis/application.py :language: python Tests ----- Tests use :ref:`provider-overriding` feature to replace example service with a mock. See ``fastapiredis/tests.py``: .. literalinclude:: ../../examples/miniapps/fastapi-redis/fastapiredis/tests.py :language: python :emphasize-lines: 24 Sources ------- The source code is available on the `Github `_. .. disqus::