📖 Scenario: You are building a simple FastAPI web application to manage books in a library. To keep your project clean and easy to maintain, you want to organize your code using a common folder structure pattern.
🎯 Goal: Build a basic FastAPI project with a clear folder structure that separates the main app, routers, and models.
📋 What You'll Learn
Create a main application file main.py inside the app folder
Create a routers folder inside app with a books.py router file
Create a models.py file inside app for data models
Include a simple route in books.py that returns a list of book titles
💡 Why This Matters
🌍 Real World
Organizing code in folders is essential for real FastAPI projects to keep code manageable and scalable.
💼 Career
Understanding folder structure patterns is a key skill for backend developers working with FastAPI or similar frameworks.
Progress0 / 4 steps
1
Create the initial folder structure and main app file
Create a folder called app. Inside app, create a file named main.py with the following code: import FastAPI from fastapi and create an instance called app.
FastAPI
Hint
Use from fastapi import FastAPI and then create app = FastAPI().
2
Add a routers folder and create books router
Inside the app folder, create a folder named routers. Inside routers, create a file called books.py. In books.py, import APIRouter from fastapi, create a router instance called router, and add a GET route /books that returns a list of book titles: ["Book A", "Book B"].
FastAPI
Hint
Create router = APIRouter() and add a GET route @router.get("/books") that returns the list.
3
Create a models.py file for data models
Inside the app folder, create a file named models.py. In this file, import BaseModel from pydantic and create a class Book that inherits from BaseModel with two fields: title (string) and author (string).
FastAPI
Hint
Use class Book(BaseModel): with title: str and author: str fields.
4
Connect the books router in main.py
In main.py, import router from app.routers.books and include it in the app using app.include_router(router).
FastAPI
Hint
Use app.include_router(router) to add the books routes to the main app.
Practice
(1/5)
1. Which folder is best suited to keep your API endpoint definitions in a FastAPI project?
easy
A. routes
B. models
C. services
D. database
Solution
Step 1: Understand folder roles in FastAPI
The routes folder is typically used to store API endpoint definitions, organizing the paths and HTTP methods.
Step 2: Match folder purpose to content
models is for data models, services for business logic, and database for database connection code.
Final Answer:
routes -> Option A
Quick Check:
API endpoints go in routes [OK]
Hint: API paths belong in routes folder [OK]
Common Mistakes:
Putting endpoints in models folder
Mixing database code with routes
Storing business logic in routes
2. Which of the following is the correct way to organize a FastAPI project folder for database models?
easy
A. Store models in the root project folder
B. Place all models inside a folder named services
C. Keep models mixed with route files
D. Put database models inside a folder named models
Solution
Step 1: Identify the folder for data models
Database models represent data structure and belong in a dedicated models folder for clarity and separation.
Step 2: Evaluate other options
services is for business logic, mixing models with routes or root folder reduces clarity and maintainability.
Final Answer:
Put database models inside a folder named models -> Option D
Quick Check:
Models folder holds data models [OK]
Hint: Models go in models folder, not services or root [OK]
Which file should contain the function to fetch user data from the database?
medium
A. routes/user.py
B. models/user.py
C. services/user_service.py
D. app/__init__.py
Solution
Step 1: Understand folder responsibilities
routes handles API endpoints, models defines data structures, and services contains business logic like fetching data.
Step 2: Match function purpose to folder
Fetching user data is business logic, so it belongs in services/user_service.py.
Final Answer:
services/user_service.py -> Option C
Quick Check:
Data fetching logic goes in services [OK]
Hint: Business logic like fetching data belongs in services [OK]
Common Mistakes:
Putting fetching logic in routes
Adding functions to models instead of services
Using __init__.py for logic
4. You see this folder structure in a FastAPI project:
app/
routes.py
models.py
services.py
database.py
What is a likely problem with this structure as the project grows?
medium
A. Too many files in root, making it hard to maintain
B. Using .py files instead of folders is invalid in FastAPI
C. Missing a templates folder for HTML rendering
D. Database code should be inside routes.py
Solution
Step 1: Analyze flat file structure
Having all files directly under app/ is okay for small projects but becomes cluttered and hard to maintain as code grows.
Step 2: Understand folder benefits
Using folders like routes/, models/, and services/ helps organize code by purpose and improves maintainability.
Final Answer:
Too many files in root, making it hard to maintain -> Option A
Quick Check:
Flat structure hurts maintainability [OK]
Hint: Avoid many files in root; use folders for organization [OK]
Common Mistakes:
Thinking .py files can't be used
Confusing database code location
Assuming templates folder is mandatory
5. You want to organize a FastAPI project that has multiple features like users, products, and orders. Which folder structure pattern best supports scalability and maintainability?
hard
A. Mix routes and models in the same folder to reduce folder count
B. Create separate folders for each feature with their own routes, models, and services inside
C. Keep all code files in the root folder for easy access
D. Put all routes in one routes folder, all models in one models folder, and all services in one services folder
Solution
Step 1: Understand feature-based folder structure
Organizing by feature means each feature (users, products, orders) has its own folder containing routes, models, and services, improving modularity.
Step 2: Compare with other patterns
Grouping all routes or models together can become large and hard to maintain. Keeping all files in root or mixing unrelated code reduces clarity.
Final Answer:
Create separate folders for each feature with their own routes, models, and services inside -> Option B
Quick Check:
Feature-based folders improve scalability [OK]
Hint: Use feature folders with routes, models, services inside [OK]
Common Mistakes:
Using flat folders for all code
Mixing unrelated code in one folder
Ignoring modular design for growth
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.