Quantcast
Channel: Active questions tagged rest - Stack Overflow
Viewing all articles
Browse latest Browse all 3641

FastAPI conflict path parameter in endpoint - good practices?

$
0
0

I am creating 2 GET methods for a resource student using FastAPI. I'm looking to GET a student in 2 ways: by student_id or by student_name.

The issue is that, I initially created the 2 endpoints as follows

@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

The problem is that the endpoint names are conflicting with each other, it is both /student followed by a parameter and only one of them could work - in this case only /student/{student_name} because it is defined in the front. So I came up with this simple workaround by adding a bit more to the endpoint names:

@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

I added /byid to the endpoint name of the get_student)by_id method. While both endpoints could work now, I am wondering if this is considered a good practice? WHat would be the best practice when one resource needed to be queried with a single path parameter to differentiate the endpoint names?


Viewing all articles
Browse latest Browse all 3641

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>