Параметр пути конфликта FastAPI в конечной точке – передовая практика?Python

Программы на Python
Ответить
Anonymous
 Параметр пути конфликта FastAPI в конечной точке – передовая практика?

Сообщение Anonymous »

Я создаю 2 метода GET для студента-ресурса с использованием FastAPI. Я хочу ПОЛУЧИТЬ студента двумя способами: по Student_id или по Student_name.
Проблема в том, что я изначально создал 2 конечные точки следующим образом:

Код: Выделить всё

@app.get("/student/{student_name}", response_model=schemas.Student, status_code=200)
def get_student_by_name(student_name: str, db: Session = Depends(get_db)):
db_student = crud.get_student_by_name(db, student_name)
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
return db_student

@app.get("/student/{student_id}", response_model=schemas.Student, status_code=200)
def get_student_by_id(student_id: int, db: Session = Depends(get_db)):
db_student = crud.get_student_by_id(db, student_id)
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
return db_student

Проблема в том, что имена конечных точек конфликтуют друг с другом, это /student, за которым следует параметр, и только один из них может работать - в данном случае только / Student/{student_name}, потому что он определен спереди. Поэтому я придумал этот простой обходной путь, добавив немного больше к именам конечных точек:

Код: Выделить всё

@app.get("/student/{student_name}", response_model=schemas.Student, status_code=200)
def get_student_by_name(student_name: str, db: Session = Depends(get_db)):
db_student = crud.get_student_by_name(db, student_name)
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
return db_student

@app.get("/student/byid/{student_id}", response_model=schemas.Student, status_code=200)
def get_student_by_id(student_id: int, db: Session = Depends(get_db)):
db_student = crud.get_student_by_id(db, student_id)
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
return db_student

Я добавил /byid к имени конечной точки метода get_student)by_id. Хотя сейчас обе конечные точки могут работать, мне интересно, считается ли это хорошей практикой? Что лучше всего сделать, если к одному ресурсу необходимо запросить один параметр пути, чтобы различать имена конечных точек?


Подробнее здесь: https://stackoverflow.com/questions/693 ... -practices
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»