FastAPI allows you to declare additional information and validation for path and query parameters.
Adding metadata and validations
Using Path, we can add additional metadata to the path parameter.
@app.get("/products/{productId}/{noOfItems}/{infoLevel}/{formatType}")
def productInfo(
infoLevel : str,
productId: str = Path(
...,
min_length = 4,
max_length=50,
title='Product id',
description = "Enter valid product id"
),
noOfItems : int = Path(..., gt = 0, lt = 50, title='Number of items to return'),
formatType : str = Path(..., min_length=2)
)
A path parameter is always required as it has to be part of the path.So, you should declare it with ... to mark it as required.
In the above example, I added title and description to the path parameter ‘productId’. I added validations to the productid by passing min_length and max_legth arguments to the path function. Similarly I added numeric validations (gt (>), lt (<)) to the path parameter noOfItems.
Add regular expression to a path parameter
Path function takes a 'regex' argument and validate the received path parameter against this regular expression.
Example
@app.get("/products/by-email/{email}")
def productsbyEmail(
email: str = Path(..., max_length=50, title='Valid email id', regex='[^@]+@[^@]+\.[^@]+')
):
Find the below working application.
pathParamValidations.py
from fastapi import FastAPI, Path
from pydantic import BaseModel
from typing import Optional
app = FastAPI()
@app.get("/products/{productId}/{noOfItems}/{infoLevel}/{formatType}")
def productInfo(
infoLevel : str,
productId: str = Path(
...,
min_length = 4,
max_length=50,
title='Product id',
description = "Enter valid product id"
),
noOfItems : int = Path(..., gt = 0, lt = 50, title='Number of items to return'),
formatType : str = Path(..., min_length=2)
):
return {"productId" : productId, "noOfItems" : noOfItems, 'infoLevel' : infoLevel, 'formatType' : formatType}
@app.get("/products/by-email/{email}")
def productsbyEmail(
email: str = Path(..., max_length=50, title='Valid email id', regex='[^@]+@[^@]+\.[^@]+')
):
return {"email" : email}
Open terminal and execute the command ‘uvicorn pathParamValidations:app --reload’.
$uvicorn pathParamValidations:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [52481] using statreload
INFO: Started server process [52483]
INFO: Waiting for application startup.
INFO: Application startup complete.
Open the url ‘http://127.0.0.1:8000/docs’ and experiment with the swagger ui.
No comments:
Post a Comment