From 0ab6cb356ef54cf38bac06b3a8515128fc0a3159 Mon Sep 17 00:00:00 2001
From: Igor Benav
Date: Tue, 10 Jun 2025 03:01:02 -0300
Subject: [PATCH] initial documentation
---
README.md | 54 +-
docs/assets/FastAPI-boilerplate.png | Bin 0 -> 399217 bytes
docs/getting-started/configuration.md | 163 ++++
docs/getting-started/first-run.md | 594 ++++++++++++
docs/getting-started/index.md | 180 ++++
docs/getting-started/installation.md | 366 ++++++++
docs/index.md | 120 +++
docs/stylesheets/extra.css | 20 +
docs/user-guide/api/endpoints.md | 328 +++++++
docs/user-guide/api/exceptions.md | 465 +++++++++
docs/user-guide/api/index.md | 125 +++
docs/user-guide/api/pagination.md | 316 +++++++
docs/user-guide/api/versioning.md | 418 +++++++++
docs/user-guide/authentication/index.md | 198 ++++
docs/user-guide/authentication/jwt-tokens.md | 669 +++++++++++++
docs/user-guide/authentication/permissions.md | 634 +++++++++++++
.../authentication/user-management.md | 879 ++++++++++++++++++
docs/user-guide/background-tasks/index.md | 92 ++
docs/user-guide/caching/cache-strategies.md | 191 ++++
docs/user-guide/caching/client-cache.md | 509 ++++++++++
docs/user-guide/caching/index.md | 77 ++
docs/user-guide/caching/redis-cache.md | 357 +++++++
docs/user-guide/configuration/docker-setup.md | 539 +++++++++++
.../configuration/environment-specific.md | 692 ++++++++++++++
.../configuration/environment-variables.md | 651 +++++++++++++
docs/user-guide/configuration/index.md | 311 +++++++
.../configuration/settings-classes.md | 537 +++++++++++
docs/user-guide/database/crud.md | 491 ++++++++++
docs/user-guide/database/index.md | 235 +++++
docs/user-guide/database/migrations.md | 470 ++++++++++
docs/user-guide/database/models.md | 484 ++++++++++
docs/user-guide/database/schemas.md | 650 +++++++++++++
docs/user-guide/development.md | 717 ++++++++++++++
docs/user-guide/index.md | 78 ++
docs/user-guide/production.md | 709 ++++++++++++++
docs/user-guide/project-structure.md | 296 ++++++
docs/user-guide/rate-limiting/index.md | 428 +++++++++
docs/user-guide/testing.md | 810 ++++++++++++++++
mkdocs.yml | 150 +++
39 files changed, 14998 insertions(+), 5 deletions(-)
create mode 100644 docs/assets/FastAPI-boilerplate.png
create mode 100644 docs/getting-started/configuration.md
create mode 100644 docs/getting-started/first-run.md
create mode 100644 docs/getting-started/index.md
create mode 100644 docs/getting-started/installation.md
create mode 100644 docs/index.md
create mode 100644 docs/stylesheets/extra.css
create mode 100644 docs/user-guide/api/endpoints.md
create mode 100644 docs/user-guide/api/exceptions.md
create mode 100644 docs/user-guide/api/index.md
create mode 100644 docs/user-guide/api/pagination.md
create mode 100644 docs/user-guide/api/versioning.md
create mode 100644 docs/user-guide/authentication/index.md
create mode 100644 docs/user-guide/authentication/jwt-tokens.md
create mode 100644 docs/user-guide/authentication/permissions.md
create mode 100644 docs/user-guide/authentication/user-management.md
create mode 100644 docs/user-guide/background-tasks/index.md
create mode 100644 docs/user-guide/caching/cache-strategies.md
create mode 100644 docs/user-guide/caching/client-cache.md
create mode 100644 docs/user-guide/caching/index.md
create mode 100644 docs/user-guide/caching/redis-cache.md
create mode 100644 docs/user-guide/configuration/docker-setup.md
create mode 100644 docs/user-guide/configuration/environment-specific.md
create mode 100644 docs/user-guide/configuration/environment-variables.md
create mode 100644 docs/user-guide/configuration/index.md
create mode 100644 docs/user-guide/configuration/settings-classes.md
create mode 100644 docs/user-guide/database/crud.md
create mode 100644 docs/user-guide/database/index.md
create mode 100644 docs/user-guide/database/migrations.md
create mode 100644 docs/user-guide/database/models.md
create mode 100644 docs/user-guide/database/schemas.md
create mode 100644 docs/user-guide/development.md
create mode 100644 docs/user-guide/index.md
create mode 100644 docs/user-guide/production.md
create mode 100644 docs/user-guide/project-structure.md
create mode 100644 docs/user-guide/rate-limiting/index.md
create mode 100644 docs/user-guide/testing.md
create mode 100644 mkdocs.yml
diff --git a/README.md b/README.md
index d220158..38378f5 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
- Fast FastAPI boilerplate
+ Benav Labs FastAPI boilerplate
Yet another template to speed your FastAPI development up.
-
+
@@ -33,6 +33,16 @@
+---
+
+## 📖 Documentation
+
+📚 **[Visit our comprehensive documentation at benavlabs.github.io/fastapi-boilerplate](https://benavlabs.github.io/fastapi-boilerplate/)**
+
+This README provides a quick reference for LLMs and developers, but the full documentation contains detailed guides, examples, and best practices.
+
+---
+
## 0. About
**FastAPI boilerplate** creates an extendable async API using FastAPI, Pydantic V2, SQLAlchemy 2.0 and PostgreSQL:
@@ -47,7 +57,7 @@
- [`NGINX`](https://nginx.org/en/) High-performance low resource consumption web server used for Reverse Proxy and Load Balancing.
> \[!TIP\]
-> If you want the `SQLModel` version instead, head to [SQLModel-boilerplate](https://github.com/igorbenav/SQLModel-boilerplate).
+> There's a `SQLModel` version as well, but it's no longer updated: [SQLModel-boilerplate](https://github.com/igorbenav/SQLModel-boilerplate).
## 1. Features
@@ -62,8 +72,6 @@
- ⎘ Out of the box offset and cursor pagination support with fastcrud
- 🛑 Rate Limiter dependency
- 👮 FastAPI docs behind authentication and hidden based on the environment
-- 🦾 Easily extendable
-- 🤸♂️ Flexible
- 🚚 Easy running with docker compose
- ⚖️ NGINX Reverse Proxy and Load Balancing
@@ -118,6 +126,8 @@ ______________________________________________________________________
## 3. Prerequisites
+> 📖 **[See detailed installation guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/getting-started/installation/)**
+
### 3.0 Start
Start by using the template, and naming the repository to what you want.
@@ -144,6 +154,8 @@ git clone https://github.com/igormagalhaesr/FastAPI-boilerplate
### 3.1 Environment Variables (.env)
+> 📖 **[See complete configuration guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/getting-started/configuration/)**
+
Then create a `.env` file inside `src` directory:
```sh
@@ -302,6 +314,8 @@ pip install uv
## 4. Usage
+> 📖 **[See complete first run guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/getting-started/first-run/)**
+
### 4.1 Docker Compose
If you used docker compose, your setup is done. You just need to ensure that when you run (while in the base folder):
@@ -530,8 +544,12 @@ uv run alembic upgrade head
## 5. Extending
+> 📖 **[See comprehensive development guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/development/)**
+
### 5.1 Project Structure
+> 📖 **[See detailed project structure guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/project-structure/)**
+
First, you may want to take a look at the project structure and understand what each file is doing.
```sh
@@ -661,6 +679,8 @@ Note that this table is used to blacklist the `JWT` tokens (it's how you log a u
### 5.3 SQLAlchemy Models
+> 📖 **[See database models guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/database/models/)**
+
Inside `app/models`, create a new `entity.py` for each new entity (replacing entity with the name) and define the attributes according to [SQLAlchemy 2.0 standards](https://docs.sqlalchemy.org/en/20/orm/mapping_styles.html#orm-mapping-styles):
> \[!WARNING\]
@@ -683,6 +703,8 @@ class Entity(Base):
### 5.4 Pydantic Schemas
+> 📖 **[See database schemas guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/database/schemas/)**
+
Inside `app/schemas`, create a new `entity.py` for each new entity (replacing entity with the name) and create the schemas according to [Pydantic V2](https://docs.pydantic.dev/latest/#pydantic-examples) standards:
```python
@@ -731,6 +753,8 @@ class EntityDelete(BaseModel):
### 5.5 Alembic Migrations
+> 📖 **[See database migrations guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/database/migrations/)**
+
> \[!WARNING\]
> To create the tables if you did not create the endpoints, ensure that you import the models in src/app/models/__init__.py. This step is crucial to create the new models.
@@ -748,6 +772,8 @@ uv run alembic upgrade head
### 5.6 CRUD
+> 📖 **[See CRUD operations guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/database/crud/)**
+
Inside `app/crud`, create a new `crud_entities.py` inheriting from `FastCRUD` for each new entity:
```python
@@ -953,6 +979,8 @@ crud_user.get(db=db, username="myusername", schema_to_select=UserRead)
### 5.7 Routes
+> 📖 **[See API endpoints guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/api/endpoints/)**
+
Inside `app/api/v1`, create a new `entities.py` file and create the desired routes
```python
@@ -993,6 +1021,8 @@ router.include_router(entity_router)
#### 5.7.1 Paginated Responses
+> 📖 **[See API pagination guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/api/pagination/)**
+
With the `get_multi` method we get a python `dict` with full suport for pagination:
```javascript
@@ -1057,6 +1087,8 @@ async def read_entities(
#### 5.7.2 HTTP Exceptions
+> 📖 **[See API exceptions guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/api/exceptions/)**
+
To add exceptions you may just import from `app/core/exceptions/http_exceptions` and optionally add a detail:
```python
@@ -1084,6 +1116,8 @@ if not post:
### 5.8 Caching
+> 📖 **[See comprehensive caching guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/caching/)**
+
The `cache` decorator allows you to cache the results of FastAPI endpoint functions, enhancing response times and reducing the load on your application by storing and retrieving data in a cache.
Caching the response of an endpoint is really simple, just apply the `cache` decorator to the endpoint function.
@@ -1247,6 +1281,8 @@ For `client-side caching`, all you have to do is let the `Settings` class define
### 5.10 ARQ Job Queues
+> 📖 **[See background tasks guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/background-tasks/)**
+
Depending on the problem your API is solving, you might want to implement a job queue. A job queue allows you to run tasks in the background, and is usually aimed at functions that require longer run times and don't directly impact user response in your frontend. As a rule of thumb, if a task takes more than 2 seconds to run, can be executed asynchronously, and its result is not needed for the next step of the user's interaction, then it is a good candidate for the job queue.
> [!TIP]
@@ -1342,6 +1378,8 @@ async def your_background_function(
### 5.11 Rate Limiting
+> 📖 **[See rate limiting guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/rate-limiting/)**
+
To limit how many times a user can make a request in a certain interval of time (very useful to create subscription plans or just to protect your API against DDOS), you may just use the `rate_limiter_dependency` dependency:
```python
@@ -1456,6 +1494,8 @@ Note that for flexibility (since this is a boilerplate), it's not necessary to p
### 5.12 JWT Authentication
+> 📖 **[See authentication guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/authentication/)**
+
#### 5.12.1 Details
The JWT in this boilerplate is created in the following way:
@@ -1641,6 +1681,8 @@ volumes:
## 6. Running in Production
+> 📖 **[See production deployment guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/production/)**
+
### 6.1 Uvicorn Workers with Gunicorn
In production you may want to run using gunicorn to manage uvicorn workers:
@@ -1834,6 +1876,8 @@ And finally, on your browser: `http://localhost/docs`.
## 7. Testing
+> 📖 **[See comprehensive testing guide in our docs](https://benavlabs.github.io/fastapi-boilerplate/user-guide/testing/)**
+
This project uses **fast unit tests** that don't require external services like databases or Redis. Tests are isolated using mocks and run in milliseconds.
### 7.1 Writing Tests
diff --git a/docs/assets/FastAPI-boilerplate.png b/docs/assets/FastAPI-boilerplate.png
new file mode 100644
index 0000000000000000000000000000000000000000..5b7985ad46746b7fb164a55a869a662713d9ab2c
GIT binary patch
literal 399217
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