Introduction
Have you ever wondered how websites and apps work behind the scenes? When you click on a blog post or like a photo, there's an invisible conversation happening between your device and computers across the internet. Today, we'll demystify this process by exploring FastAPI - a modern Python framework for building web applications.
I recently implemented a feature to track blog post views using FastAPI, and I want to share how surprisingly intuitive it was once I understood the core concepts.
FastAPI: The Digital Library
Imagine a public library - a well-organized building where people can find books, magazines, and information. This analogy perfectly captures how FastAPI works!
1. The Information Desk (Routes)
In a library: When you enter, you approach the information desk and say, "I'd like to find book #123" or "Where are the science fiction novels?"
In FastAPI: These are called "routes" - they're like the entry points to your application. They define what URLs people can visit.
@blog.get("/{id}") # This route handles requests for specific blog posts
def get_blog_by_id(id: str, db: Session = Depends(get_db)):
# Code that handles this specific request
When someone visits /blogs/123
, this route receives the request just like a librarian at the information desk.
2. The Library Helpers (Services)
In a library: The librarian doesn't personally fetch every book. Instead, they call specialized helpers who know exactly where to look and how to handle different types of requests.
In FastAPI: These are "services" - they contain the actual business logic and operations.
class BlogService:
def fetch_and_increment_view(self, blog_id: str):
# Find the blog in the database
# Increase its view count by 1
# Return the updated blog
My fetch_and_increment_view
function is like a helper who knows how to find blogs AND update the "times viewed" counter.
3. The Organization System (Models)
In a library: Books are organized by a specific system - fiction vs. non-fiction, subject categories, author names, etc.
In FastAPI: These are "models" - they define the structure of your data.
class Blog(BaseTableModel):
__tablename__ = "blogs"
title = Column(String(255), nullable=False)
content = Column(Text, nullable=False)
views = Column(Integer, nullable=False, server_default=text("0"))
# Other fields...
This model defines that blog posts have titles, content, and a view counter that starts at zero.
A Real-World Example: Tracking Blog Views
Let's see how this all connects by following a simple request through my blog system:
Step 1: A Visitor Arrives
Someone clicks on "My Summer Vacation" blog post with ID #123.
Step 2: The Information Desk (Route)
FastAPI receives a request to /blogs/123
and finds the right route handler:
@blog.get("/{id}", response_model=BlogPostResponse)
def get_blog_by_id(id: str, db: Session = Depends(get_db)):
blog_service = BlogService(db)
blog_post = blog_service.fetch_and_increment_view(id)
return success_response(message="Blog post retrieved successfully!", data=blog_post)
The route says: "Someone wants blog #123, and I need to count this as a view."
Step 3: The Helper Does Their Job (Service)
The route calls the blog service, which does two important things:
def fetch_and_increment_view(self, blog_id: str):
try:
# Find the blog
blog = self.fetch(blog_id)
# Check if it exists
if not blog:
raise HTTPException(status_code=404, detail="Blog not found")
# Increase the view count
blog.views = blog.views + 1 if blog.views else 1
# Save the updated view count
self.db.refresh(blog)
self.db.commit()
return blog
except Exception as e:
# Handle errors
Just like a library helper who both retrieves your book AND marks it as borrowed in the system.
Step 4: Return the Blog Post
The service returns the blog post (with its updated view count) back through the route to the visitor.
Why This Approach Works So Well
The beauty of FastAPI's structure is separation of concerns:
- Routes only worry about receiving requests and returning responses
- Services contain all the complex business logic
- Models define how data is structured and stored
This is like a well-organized library where:
- Information desk staff don't need to memorize where every book is
- Helpers don't need to worry about greeting visitors
- The organization system ensures everyone can find what they need
Conclusion
FastAPI makes building web applications intuitive by organizing code in a way that mirrors real-world interactions. Just as a library has clear roles and processes for handling requests for books, FastAPI has clear components for handling web requests.
When I implemented the blog view counter feature, breaking it down into these components made the task straightforward and maintainable - just like a well-run library where everyone knows their role and works together seamlessly.
Top comments (0)