FastAPI: Unleashing the Power of Python Web Development

Ashar-Rahim
5 min readJul 12, 2023

--

Once upon a time, in the world of Python web development, a new framework emerged, promising lightning-fast performance and a delightful development experience. This framework was called FastAPI, and its story is one of innovation, growth, and an exciting future.

Chapter 1: The History

FastAPI made its grand entrance in 2018, introduced by Sebastián Ramírez, a talented developer with a vision for creating a modern, efficient, and easy-to-use web framework. Inspired by the asynchronous nature of Python’s asyncio, FastAPI sought to revolutionize the way web applications were built.

Chapter 2: The Present and Future

Fast forward to the present, and FastAPI has become a rising star in the Python community. Its popularity has soared due to its exceptional performance, thanks to the use of the cutting-edge asynchronous programming paradigm. With its built-in support for type hints and automatic documentation generation, FastAPI has captured the hearts of developers worldwide.

The future of FastAPI looks even brighter. The framework continues to evolve, constantly incorporating new features and enhancements. Exciting plans are in store, including improvements in WebSocket support, scalability options, and integrations with other technologies.

Chapter 3: Setting Up FastAPI

Let’s embark on a journey to set up FastAPI and witness its magic firsthand. To begin, make sure you have Python installed. Open your terminal and create a new project directory. Create a virtual environment and activate it:

$ mkdir fastapi-project
$ cd fastapi-project
$ python3 -m venv venv
$ source venv/bin/activate

Next, install FastAPI and its dependencies using pip:

(venv) $ pip install fastapi uvicorn

Now that we have FastAPI installed, let’s dive into creating a CRUD (Create, Read, Update, Delete) project with a PostgreSQL database connection for task management.

First, we need to install the necessary packages for connecting to PostgreSQL using SQLAlchemy and databases. In your project’s virtual environment, run the following command:

(venv) $ pip install sqlalchemy databases psycopg2

Next, let’s set up the PostgreSQL database connection. Create a new Python file called database.py in your project directory and add the following code:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "postgresql://username:password@localhost/db_name"

engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

Replace username, password, and db_name in the DATABASE_URL with your PostgreSQL credentials.

Now, let’s create a new Python file called models.py to define the structure of our task model. Add the following code:

from sqlalchemy import Column, Integer, String
from database import Base

class Task(Base):
__tablename__ = "tasks"

id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True)
description = Column(String)

This code defines a Task model with three columns: id, title, and description.

Next, let’s create a file called main.py to define our FastAPI application and its endpoints. Add the following code:

from fastapi import FastAPI, HTTPException
from sqlalchemy.orm import Session
import crud
import models
from database import SessionLocal, engine

app = FastAPI()

models.Base.metadata.create_all(bind=engine)

@app.get("/tasks/{task_id}")
def read_task(task_id: int, db: Session = Depends(get_db)):
task = crud.get_task(db, task_id)
if task is None:
raise HTTPException(status_code=404, detail="Task not found")
return task

@app.post("/tasks/")
def create_task(task: models.TaskCreate, db: Session = Depends(get_db)):
return crud.create_task(db, task)

This code sets up the FastAPI application and defines two endpoints: one for reading a task by its ID and another for creating a new task. We use the crud module to handle the database operations.

Next, let’s create a file called crud.py to implement the CRUD operations for tasks. Add the following code:

from sqlalchemy.orm import Session
import models

def get_task(db: Session, task_id: int):
return db.query(models.Task).filter(models.Task.id == task_id).first()

def create_task(db: Session, task: models.TaskCreate):
db_task = models.Task(title=task.title, description=task.description)
db.add(db_task)
db.commit()
db.refresh(db_task)
return db_task

This code provides the implementation for the get_task and create_task functions, which interact with the database.

Finally, let’s create a file called schemas.py to define the data schemas for our API. Add the following code:

from pydantic import BaseModel

class TaskBase(BaseModel):
title: str
description: str

class TaskCreate(TaskBase):
pass

This code defines the TaskBase schema, which includes the common fields for creating or updating a task, and the TaskCreate schema, which inherits from TaskBase and represents the data required to create a new task.

That’s it! You have set up a FastAPI project with a PostgreSQL database connection and implemented a basic CRUD API for task management. You can now run the application using Uvicorn:

(venv) $ uvicorn main:app --reload

You can test the API by making requests to http://localhost:8000 using tools like cURL, Postman, or your web browser.

Note: Remember to replace username, password, and db_name in the DATABASE_URL with your actual PostgreSQL credentials, and make sure your PostgreSQL server is running.

Feel free to extend this example and add more functionality as per your requirements. Happy coding with FastAPI!

Chapter 4: Learning FastAPI

To master the art of FastAPI, you’ll need reliable resources. Start with the official documentation, which is comprehensive and beginner-friendly. Additionally, you can find tutorials, articles, and video courses online that cater to different skill levels and learning preferences.

Chapter 5: The Versatility of FastAPI

FastAPI is a versatile framework that can be used for various projects. Its high performance makes it ideal for building APIs, web applications, microservices, and even machine learning models. Whether you’re creating a small personal project or a large-scale enterprise application, FastAPI has got you covered.

Chapter 6: Big Projects Powered by FastAPI

As word spread about FastAPI’s prowess, it caught the attention of prominent projects seeking to harness its power. Among these projects was “Tortoise ORM,” a modern and user-friendly object-relational mapping (ORM) library. Tortoise ORM had been searching for a framework that could match its speed and simplicity, and FastAPI turned out to be the perfect match.

But Tortoise ORM wasn’t the only project that recognized FastAPI’s potential. Another notable application, “Tile38,” a geospatial database, also fell under FastAPI’s spell. Tile38 had been on a quest to find a robust and scalable HTTP interface to enhance its geospatial capabilities.

But the story doesn’t end there. FastAPI’s fame spread far and wide, captivating the minds of developers who sought to create exceptional applications. Many famous projects were brought to life by the magic of FastAPI.

Chapter 7: Deploying FastAPI to a Live Server

Once your FastAPI application is ready, it’s time to deploy it to a live server. Use a hosting platform like Heroku or a cloud provider like AWS or Google Cloud. Configure the necessary settings, create a production-ready build, and launch your application to the world. Witness the magic of FastAPI in action as your application serves users with lightning-fast responses.

FastAPI — the spiffy way beyond flask! – Towards AI

Epilogue: FastAPI

FastAPI continues to captivate developers worldwide with its exceptional performance, ease of use, and versatility. Its journey from a visionary idea to a beloved framework showcases the power of innovation and the vibrant Python community.

As you embark on your own FastAPI adventure, remember that the story doesn’t end here. The future holds countless possibilities, with new features, integrations, and success stories yet to be written. So, grab your keyboard and join the FastAPI revolution, where the world of Python web development awaits your creativity and expertise.

--

--

Ashar-Rahim

Seasoned dev in ML, Flask, Django, & more. I write engaging tech articles on Medium, focusing on clarity and insight.