You can mix path, query and request body in one request.
Example
@app.put("/emps/by-id/{empId}")
def updateEmployee(empId : int, emp: EmployeeUpdateDto, gender: Optional[str] = None)
In the above example,
a. empId is the path parameter
b. emp is the request payload
c. gender is a query parameter
Find the below working application.
mixParams.py
from fastapi import FastAPI, Path, Query
from pydantic import BaseModel
from typing import Optional
app = FastAPI()
# employees information
emps = {
1 : {
"name" : "Krishna",
"age": 32,
"gender" : 'M'
},
2 : {
"name" : "Ram",
"age": 33,
"gender" : 'F'
},
3 : {
"name" : "Bomma",
"age": 38,
"gender" : 'M'
}
}
class EmployeeUpdateDto(BaseModel):
name: str
age : int
@app.get("/emps")
def allEmployees():
return emps
@app.put("/emps/by-id/{empId}")
def updateEmployee(empId : int, emp: EmployeeUpdateDto, gender: Optional[str] = None):
if(empId not in emps):
return {"message" : "Not found"}
persistedEmp = emps[empId]
if(emp.name != None):
persistedEmp["name"] = emp.name
if(emp.age != None):
persistedEmp["age"] = emp.age
persistedEmp["gender"] = gender
if(gender == None):
persistedEmp["gender"] = 'M'
return {
"id" : empId,
"name" : persistedEmp["name"],
"age": persistedEmp["age"],
"gender" : persistedEmp["gender"]
}
Open terminal and execute the command ‘uvicorn mixParams:app --reload’.
$uvicorn mixParams:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [74173] using statreload
INFO: Started server process [74175]
INFO: Waiting for application startup.
INFO: Application startup complete.
Open the url ‘http://127.0.0.1:8000/docs’ in browser and experiment with swagger documentation.
No comments:
Post a Comment