What is FastAPI?
FastAPI is a modern, fast (high-performance) web framework for building APIs with Python based on standard Python type hints. It was created by Sebastián Ramírez and is widely adopted in production systems across the industry.Key Features
- 🚀 High Performance: Built on Starlette and Pydantic, making it one of the fastest Python frameworks — on par with Node.js and Go.
- ✍️ Faster Coding: Speeds up feature development by 200–300% thanks to automatic validation and documentation.
- 🛡️ Fewer Bugs: Reduces developer-introduced errors by approximately 40% through automatic input validation.
- 📖 Auto-Generated Documentation: Generates interactive Swagger UI and ReDoc documentation pages automatically from your code.
- 🔒 Modern & Async: Native support for asynchronous programming (
async/await) out of the box.
The Tech Stack Under the Hood
FastAPI doesn’t do everything alone — it coordinates three powerful components:- Uvicorn: An ASGI (Asynchronous Server Gateway Interface) web server. It receives incoming TCP connections from clients and forwards them to FastAPI.
- Starlette: A lightweight ASGI framework toolkit. FastAPI inherits all of its routing, middleware, and web-handling capabilities from Starlette.
- Pydantic: The data validation and serialization library. It enforces types, converts compatible data, and generates error messages automatically.
When you run
uvicorn main:app --reload, Uvicorn is the process listening on port 8000. Starlette handles routing, and Pydantic validates every request and response your code touches.Installation
1
Create and activate a virtual environment
- macOS / Linux
- Windows
2
Install FastAPI and Uvicorn
- pip
- uv (faster)
3
Verify the installation
Writing Your First App
Create a file namedmain.py — this will serve as the entry point for your Employee Management System (EMS) application:
Understanding the Code
Let’s break down what each piece does:app = FastAPI(...)
Creates the central application object. This object coordinates all routing, middleware, and startup events. Passing title, description, and version automatically populates your Swagger documentation page.
@app.get("/")
This is a Path Operation Decorator. It registers the function below it to handle:
- HTTP method:
GET - Path:
/(the root path)
def read_root()
The handler function that runs when a user hits this endpoint. FastAPI automatically serializes the returned Python dictionary into a JSON response — you never need to call json.dumps() manually.
item_id: int
FastAPI reads the {item_id} from the URL path and automatically converts it to an integer. If someone sends /items/abc, FastAPI returns a 422 validation error immediately.
q: str | None = None
Any parameter that isn’t in the path is treated as a query parameter. This one is optional and defaults to None.
Running the Application
Once running, you’ll see output like this:
Accessing Your Application
Open your browser and visit the following URLs:
Visiting
http://127.0.0.1:8000/ should return:
Execution Flow
Here is how a request moves through your FastAPI application from start to finish:Your handler functions are never called directly by you. FastAPI calls them automatically when a matching request arrives — this is the Inversion of Control (IoC) pattern in action, which you’ll explore in depth in the Dependency Injection lesson.