728x90
HTTP 예외를 이용한 API 에러 처리 방법
1. import HTTPException
from fastapi import FastAPI, HTTPException
2. 함수 안에 구문 추가
매개변수로 받은 값이 존재하지 않을 때 일으키는 에러 구문
@app.delete("/{book_id}")
async def delete_book(book_id: UUID):
counter = 0
for BOOK in BOOKS:
counter += 1
if BOOK.id == book_id:
del BOOKS[counter - 1]
return f'ID:{book_id} deleted'
raise HTTPException(status_code=404, detail='Book not found')
- book_id를 넣었을 때 code(404)와 'Book not found'가 출력된다.(정보를 렌더링 할 수 없음)
3. Swagger 확인
- GET으로 요청했을 때 나오는 Title 1의 dict를 제거한다.
- 해당 UUID 기준으로 잘 지워진 것을 볼 수 있다.
- 에레확인
- 앞서 지웠던 UUID를 입력하니 사전에 HTTPException에 정의된 404 Code와 detail 항목에 "Book not found"를 확인할 수 있다.
4. header 구문 추가해 보기
@app.delete("/{book_id}")
async def delete_book(book_id: UUID):
counter = 0
for BOOK in BOOKS:
counter += 1
if BOOK.id == book_id:
del BOOKS[counter - 1]
return f'ID:{book_id} deleted'
raise HTTPException(status_code=404, detail='Book not found',
headers={"X-Header-Error":"Nothing to be seen at the UUID"})
5. Swagger 확인
- Response headers에 headers 구문을 추가했을 때와 안 했을 때의 차이를 볼 수 있다.
6. HTTPException 구문을 함수화 시키기
- 앞서 만든 delete_book 함수의 HTTPException 구문이 너무 길게 존재한다.
- 차후 코드의 재사용성을 위해 함수화를 시킨다.
def raise_item_cannot_he_found_exception():
return HTTPException(status_code=404,
detail="Book not found",
headers={"X-Header_Error":"Nothing to be seen at the UUID"})
- 새롭게 구현된 delete_book 함수
@app.delete("/{book_id}")
async def delete_book(book_id: UUID):
counter = 0
for BOOK in BOOKS:
counter += 1
if BOOK.id == book_id:
del BOOKS[counter - 1]
return f'ID:{book_id} deleted'
raise raise_item_cannot_he_found_exception()
함수화를 하면 좋은 이유
1. 코드 모듈화 - 함수를 기능별로 정리할 수 있다.
2. 코드 논리화 - 코드를 논리적으로 이해하는데 도움을 준다.
3. 코드 재사용성 - 작성한 함수는 언제든지 다시 사용할 수 있다.(반복적인 수행)
4. 코드 수정 용이 - 오류나 에러 수정이 쉽다.(안정성 향상)
5. 코드 간략화 - 중복되는 문장을 문장 밖으로 빼서 코드를 간결하게 할 수 있다.
7. Swagger 확인
- 위에 나왔던 Error구문과 똑같이 잘 나오는 것을 확인할 수 있다.
728x90
SMALL
'Develop > FastAPI' 카테고리의 다른 글
FastAPI Response Model - 25 (0) | 2022.12.24 |
---|---|
FastAPI Raise HTTP Exception(사용자 지정) - 24 (0) | 2022.12.24 |
FastAPI Delete Request - 22 (0) | 2022.12.23 |
FastAPI Put Request - 21 (2) | 2022.12.23 |
FastApi Get By UUID - 20 (0) | 2022.12.22 |