from fastapi import FastAPI, Path
# can specify a decription, and limits such as
# lt = less than
# gt = greater than
# le = less than or equal to
# ge = greater than or equal to
@app.get('/get-student/{student_id}')
def get_student(student_id: int = Path(..., description='The ID of the student you want to view', gt=0, lt=5)):
return students[student_id]
Optional
from typing import Optional
# query parameter
@app.get('/name')
def get_name(test: int, name: Optional[str] = None):
for student_id in students:
if students[student_id]['name'] == name:
return students[student_id]
return {
'Data': None
}
Everything put together
# query parameter + path parameter
@app.get('/get-by-name/{student_id}')
def get_student_by_name(student_id: int, name: Optional[str] = None):
for student_id in students:
if students[student_id]['name'] == name:
return students[student_id]
return {
'Data': None
}
POST
from pydantic import BaseModel
# request body
class Student(BaseModel):
name: str
age: int
year: str
@app.post('/create-student/{student_id}')
def create_student(student_id: int, student: Student):
if student_id in students:
return {
'Error': 'Student exists'
}
students[student_id] = student
return students[student_id]
PUT
# put
class UpdateStudent(BaseModel):
name: Optional[str] = None
age: Optional[int] = None
year: Optional[str] = None
@app.put('/update-student/{student_id}')
def update_student(student_id: int, student: UpdateStudent):
if student_id not in students:
return {
'Error': 'Student does not exist'
}
if student.name is not None:
students[student_id].name = student.name
if student.age is not None:
students[student_id].age = student.age
if student.year is not None:
students[student_id].year = student.year
return students[student_id]
DELETE
# delete
@app.delete('/update-student/{student_id}')
def delete_student(student_id: int):
if student_id not in students:
return {
'Error': 'Student does not exist'
}
del students[student_id]
return {
'Message': 'Student deleted successfully'
}