FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints. It allows you to create APIs with minimal code and takes advantage of Python’s type system to provide auto-complete, data validation, and serialization. In this tutorial, we will focus on using Pydantic with FastAPI to handle data validation and serialization.
Pydantic is a data validation and parsing library for Python that uses Python type annotations to validate data. It allows you to define data models using Python classes, with each attribute annotated with its data type. Pydantic can automatically validate input data against the defined model, parse input data into Python objects, and serialize Python objects into JSON or other formats.
To get started with FastAPI and Pydantic, you will need to install both libraries:
pip install fastapi
pip install uvicorn
pip install pydantic
Once you have installed the required libraries, you can create a new FastAPI app and define a data model using Pydantic. Create a new Python file, for example, main.py
, and add the following code:
from fastapi import FastAPI
from pydantic import BaseModel
# Define a Pydantic data model
class Item(BaseModel):
name: str
price: float
# Create a new FastAPI app
app = FastAPI()
# Define an endpoint to create a new item
@app.post("/items/")
async def create_item(item: Item):
return {"name": item.name, "price": item.price}
In this example, we defined a Pydantic data model Item
with two attributes: name
of type str
and price
of type float
. We then created a new FastAPI app and defined a single endpoint /items/
that expects a POST request with JSON data representing an Item
object. The input data is automatically validated against the Item
model, and if the data is valid, the endpoint returns a JSON object with the name
and price
values from the input data.
To run the FastAPI app, you can use the uvicorn
command-line tool:
uvicorn main:app --reload
Now you can test the API by sending a POST request to http://localhost:8000/items/
with JSON data representing an Item
object, for example:
{
"name": "Apple",
"price": 1.99
}
You should receive a response with the input data echoed back:
{
"name": "Apple",
"price": 1.99
}
In addition to data validation, Pydantic can also handle data serialization by converting Python objects to JSON data. You can define response models using Pydantic data models and return Python objects from your FastAPI endpoints. FastAPI will automatically convert the Python objects to JSON data using the defined response models.
Overall, using Pydantic with FastAPI provides a convenient and efficient way to handle data validation and serialization in your web APIs. By defining data models with type annotations, you can ensure the integrity of input data, improve code readability, and reduce the risk of runtime errors. Additionally, FastAPI’s integration with Pydantic simplifies the process of creating APIs with minimal code and high performance.
thanks, it's helpful, would be good to add more complex cases with nested data types
Do you use last version with Pydantic v2?