Top 10 Fast API Solutions for Efficient Development Workflows

Jennie Lee
7 min readApr 1, 2024

--

Looking for a Postman alternative?

Try APIDog, the Most Customizable Postman Alternative, where you can connect to thousands of APIs right now!

Prerequisites for Using FastAPI with Python

Before we dive into using FastAPI to develop efficient development workflows, there are a few prerequisites we need to have in place. These include:

Python installation

First and foremost, we need to have Python installed on our system. You can download the latest version of Python from the official website and follow the installation instructions.

Pipenv virtual environment

Next, we will be using Pipenv to manage our Python dependencies and create a virtual environment for our project. Pipenv helps maintain project-specific environments and ensures that our dependencies are isolated.

To install Pipenv, you can use the following command:

pip install --user pipenv

VSCode

We will be using Visual Studio Code (VSCode) as our code editor for this tutorial. VSCode is a powerful and lightweight editor that provides great support for Python development.

You can download and install VSCode from the official website. Once installed, make sure to install the Python extension to enhance your Python development experience.

Now that we have our prerequisites in place, let’s move on to installing FastAPI and setting up a basic application.

Installing FastAPI and Uvicorn

FastAPI is a modern web framework for building APIs with Python. It provides high performance and is easy to use. To install FastAPI, we will be using Pipenv.

Open your terminal or command prompt and navigate to your project directory. Then, use the following command to install FastAPI:

pipenv install fastapi

This will create a Pipfile and Pipfile.lock in your project directory, similar to package.json and package-lock.json in Node.js.

Next, we need to install a server called Uvicorn. Uvicorn is a lightning-fast ASGI server implementation, which is used to run the FastAPI server.

To install Uvicorn, use the following command:

pipenv install uvicorn[standard]

The [standard] flag is optional and installs additional recommended dependencies for Uvicorn.

Now that we have FastAPI and Uvicorn installed, let’s move on to setting up a basic FastAPI application.

Setting up a Basic FastAPI Application

To start building our FastAPI application, we’ll need to create a Python file, import the FastAPI module, and create an instance of the FastAPI class.

Create a new file called main.py and open it in your code editor. Add the following code to import the FastAPI module and create an instance of the FastAPI class:

from fastapi import FastAPI

app = FastAPI()

In the code above, we import the FastAPI class from the fastapi module and create an instance of it called app.

Next, we’ll define a route using a decorator provided by FastAPI. A route is a URL pattern that the API responds to with a function.

Add the following code below the previous code to define a route at the root URL (“/”):

@app.get("/")
def read_root():
return {"message": "Hello World"}

In the code above, we use the @app.get("/") decorator to define a route at the root URL ("/"). The route responds with a JSON response containing the message "Hello World".

Now that we have our basic FastAPI application set up, let’s move on to troubleshooting any issues we might face with the Python interpreter in VSCode.

Troubleshooting Python Interpreter Issue in VSCode

Sometimes, when working with a virtual environment, VSCode may have trouble detecting the correct Python interpreter. This can cause issues such as autocomplete not working or linting errors.

To resolve this issue, we need to select the correct Python interpreter in VSCode. Follow these steps:

  1. Open the Command Palette in VSCode by pressing Ctrl+Shift+P (Windows/Linux) or Cmd+Shift+P (macOS).
  2. Search for “Python: Select Interpreter” and select it from the dropdown menu.
  3. Choose the Python interpreter from the list that corresponds to your virtual environment.

If the correct Python interpreter is not listed, ensure that you have activated your virtual environment using the command pipenv shell.

With the correct Python interpreter selected, you should now be able to work with FastAPI in VSCode without any issues.

Testing the FastAPI REST API

Now that we have our FastAPI application set up and our Python interpreter issue resolved, let’s test our REST API.

To start the FastAPI server, go to your terminal or command prompt and navigate to your project directory. Use the following command to start the server:

uvicorn main:app --reload

The main:app parameter specifies the Python file (main.py) and the instance of the FastAPI class (app) to run.

Once the server is running, open your browser and visit the following URL: http://localhost:8000. You should see the JSON response from the root route with the message "Hello World".

To access routes other than the root route, append the route path to the URL. For example, to access a route that returns a list of dictionaries, you can visit http://localhost:8000/persons.

Congratulations! You have successfully tested your FastAPI REST API.

Exploring FastAPI’s Swagger Documentation

One of the great features of FastAPI is its built-in documentation engine called Swagger. Swagger provides an interactive documentation interface that allows developers to explore and test the API endpoints.

To access the Swagger documentation for your FastAPI application, open your browser and visit the following URL: http://localhost:8000/docs.

The Swagger documentation page presents a user-friendly interface that displays all the routes, models, and parameters defined in your FastAPI application.

By using Swagger, you can easily explore and understand your API’s functionality, test each endpoint with real-time responses, and even generate client SDKs for different programming languages.

Using Swagger makes it easier for other developers to understand and integrate with your API, as the documentation is always up-to-date with your code.

Using Pydantic’s BaseModel for Input Validation

FastAPI integrates seamlessly with Pydantic, a powerful data validation and parsing library. Pydantic allows us to define data models with input validation and automatic documentation generation.

To create a data model, we’ll use Pydantic’s BaseModel class as the base for our models. Let's create a simple example using a Person model that represents a person's name and age.

First, import the BaseModel class from the pydantic module:

from pydantic import BaseModel

Next, define the Person model by subclassing the BaseModel class and adding the desired fields:

class Person(BaseModel):
name: str
age: int

In the code above, we define two fields: name of type string (str) and age of type integer (int).

Now, let’s use the Person model in a POST request endpoint. Add the following code inside your main.py file:

@app.post("/person")
def create_person(person: Person):
return {"message": f"Person created: {person.name}, {person.age}"}

In the code above, we define a new route using the @app.post("/person") decorator. The route expects a Person object as the request body, which will be automatically validated by FastAPI using the Person model.

When a request is made to this route, FastAPI will validate the request body according to the defined model and automatically convert it into a Person object. We can then use this object in our endpoint's logic.

Manipulating Data with Pydantic Models

In addition to input validation, Pydantic models allow us to perform various operations on the data before returning a response.

Let’s modify our create_person endpoint to change the name field to uppercase and use string formatting to output the result.

Replace the previous create_person endpoint code with the following:

@app.post("/person")
def create_person(person: Person):
person.name = person.name.upper()
return {"message": f"Person created: {person.name}, {person.age}"}

In the code above, we modify the name field of the Person object by converting it to uppercase using the upper() method. We then use string formatting to include the updated name and age fields in the response message.

This shows how you can manipulate the data before returning the response, allowing you to format and transform the data as needed.

Implementing Output Models in FastAPI

In addition to input validation, FastAPI also allows us to define output models to define the structure of the response data.

To demonstrate this, let’s create an output model for our create_person endpoint that only includes the name field.

Add the following code before the create_person endpoint in your main.py file:

class PersonOutput(BaseModel):
name: str

In the code above, we define a new PersonOutput model that only includes the name field.

Now, let’s update our create_person endpoint to return an instance of the PersonOutput model instead of a dictionary:

@app.post("/person", response_model=PersonOutput)
def create_person(person: Person):
person.name = person.name.upper()
return PersonOutput(name=person.name)

In the code above, we use the response_model parameter of the @app.post decorator to specify the PersonOutput model as the response model for the endpoint.

By doing this, FastAPI will automatically convert the returned PersonOutput instance into JSON and validate it against the model's definition before sending the response.

Using output models in FastAPI allows us to control the structure of the response data, hiding or excluding sensitive information and providing a consistent API response.

Conclusion

In this tutorial, we have explored the top 10 Fast API solutions for efficient development workflows. We covered the prerequisites for using FastAPI with Python, including Python installation, Pipenv virtual environment setup, and VSCode configuration.

We then proceeded to install FastAPI and Uvicorn using Pipenv, and set up a basic FastAPI application. We learned about defining routes and returning JSON responses. We also troubleshooted any Python interpreter issue in VSCode.

With our FastAPI application set up, we tested the REST API by accessing the routes in a browser and viewed the JSON responses. We also explored FastAPI’s built-in Swagger documentation and discussed the benefits of using Swagger for API documentation.

We further enhanced our FastAPI application by using Pydantic’s BaseModel for input validation. We created a Person model and used it in a POST request endpoint. We also showcased how to manipulate the data using the Person model before returning a response.

Lastly, we implemented output models in FastAPI to control the structure of the response data. We created an PersonOutput model and used it to define the response for the create_person endpoint.

FastAPI provides a powerful and efficient way to develop REST APIs with Python, making it an excellent choice for efficient development workflows. By leveraging its features, such as input validation with Pydantic and documentation with Swagger, developers can build robust and well-documented APIs in no time.

In the next tutorial, we will delve deeper into FastAPI and cover topics such as creating full CRUD functionality using SQLAlchemy and implementing error handling. Stay tuned!

Looking for a Postman alternative?

Try APIDog, the Most Customizable Postman Alternative, where you can connect to thousands of APIs right now!

--

--

Jennie Lee
Jennie Lee

Written by Jennie Lee

Software Testing Blogger, #API Testing

No responses yet