Getting Started with FastAPI: Build Your First REST API in Minutes

Software Developer I build modern SaaS tools with Vue.js & FastAPI · Sharing tutorials, dev logs, and business insights for solo devs & makers. Building in public.
Introduction
FastAPI is a modern, fast (high-performance) web framework for building APIs with Python 3.7+ based on standard Python type hints. Whether you're creating a microservice, a full-fledged backend for your application, or just learning modern backend development, FastAPI is your friend.
In this article, we’ll go step-by-step to build a simple yet well-structured REST API using FastAPI — perfect for beginners or anyone looking to level up their backend skills.
Why FastAPI?
Here’s why developers love it:
✅ Fast: Built on Starlette and Pydantic — incredibly performant
✅ Automatic Docs: Swagger UI and ReDoc generated instantly
✅ Type-Safe: Python typing for inputs, outputs, validation
✅ Easy to Learn: Minimal boilerplate and async-first
1. Project Setup
Let’s start with a clean environment.
🔧 Install FastAPI and Uvicorn:
bashCopierModifierpip install fastapi uvicorn
We’ll use Uvicorn as the ASGI server to run our app.
📁 Project Structure (recommended):
cssCopierModifierfastapi-tutorial/
│
├── main.py
├── models.py
├── schemas.py
└── routers/
└── items.py
We’ll keep it modular and scalable from the beginning.
2. Creating Your First Endpoint
Let’s start with main.py:
pythonCopierModifierfrom fastapi import FastAPI
from routers import items
app = FastAPI()
# Include our router
app.include_router(items.router)
@app.get("/")
def read_root():
return {"message": "Welcome to FastAPI!"}
3. Create Models and Schemas
Let’s add a basic Item object.
schemas.py – using Pydantic for validation
pythonCopierModifierfrom pydantic import BaseModel
class Item(BaseModel):
name: str
description: str | None = None
price: float
in_stock: bool = True
4. Add a Router
Let’s build our endpoints in routers/items.py.
routers/items.py
pythonCopierModifierfrom fastapi import APIRouter
from schemas import Item
router = APIRouter(prefix="/items", tags=["Items"])
# In-memory database
items_db = []
@router.post("/")
def create_item(item: Item):
items_db.append(item)
return {"message": "Item created", "item": item}
@router.get("/")
def list_items():
return items_db
Now when you run the app, the /items route is available.
5. Run Your FastAPI App
bashCopierModifieruvicorn main:app --reload
Visit http://localhost:8000/docs
🎉 You get an auto-generated Swagger UI to test your API!
6. Try It Out
POST /items with this JSON:
jsonCopierModifier{
"name": "Notebook",
"description": "A productivity tool",
"price": 12.99,
"in_stock": true
}
GET /items will return all added items.
Bonus: Add Modularity from the Start
Using routers/, schemas.py, and models.py (if needed for DB) helps your project scale.
You can also easily switch to SQLAlchemy, add middleware, auth, async DB access, etc.
Conclusion
You’ve just created a modular, modern, and production-friendly API with FastAPI in minutes!
✅ Modular structure
✅ Auto-validation and docs
✅ Beginner-friendly and scalable
🔗 Resources
FastAPI Documentation
Pydantic
💬 Have questions or want a part 2 with database integration (SQLite + SQLAlchemy)? Drop a comment below!



