본문 바로가기

Tech/FastAPI

FastAPI Callback 기능 구현

FastAPI를 사용하여 API 개발도중 Callback 함수를 써야할 일이 생겼었다..

FastAPI documents에 OpenAPI Callbacks라고 있었으나, 아무리 읽고 해봐도 안됨. (아래 링크)

fastapi.tiangolo.com/advanced/openapi-callbacks/

 

OpenAPI Callbacks - FastAPI

OpenAPI Callbacks You could create an API with a path operation that could trigger a request to an external API created by someone else (probably the same developer that would be using your API). The process that happens when your API app calls the externa

fastapi.tiangolo.com

 

위 참고 문서대로 해도 안되길래 디버깅을 해보았더니, callback url로 등록한것이 호출되지 않음을 확인함.

 

결국에 해결법으로는, 

Callback 하려했던 함수를 그냥 호출했다.

 

콜백으로 쓰고자하는 함수를 개별적인 APIRouter에 추가하고,

추가한 APIRouter는 docs에서 callback 함수가 있다는것을 시각화 하기위해, method 호출의 `callbacks=` 파라미터 값에 적용했다.

 

위 내용을 대충 코드로 요약하자면 아래와 같다.

코드는 방법을 설명하는 정도의 간단한 내용

router = APIRouter()
callback_router = APIRouter()

@callback_router.post(
    path="",
    description="CallBack API"
)
@router.post(
    path="",
    description="CallBack API"
)
def callback_function():
    """
    나는 콜백 함수
    """

callback 호출할 함수에 대하여 위처럼 router를 분할하여 docs에서 표현할 Router를 개별 생성함.

 

'''
위에 파일 import 필요.
왜?
 - callback_router를 가져와야지~
 - callback_function도 가져와야지!
'''

@router.post(
    path="",
    callbacks=callback_router.routes,
    description=" Create API"
)
def create_any():
    """
    무언가를 만드는 API
    """
    callback_function()

 위처럼 그냥 단순 함수 호출로 기능을 구현함...

반응형

'Tech > FastAPI' 카테고리의 다른 글

FastAPI zip 파일 업로드  (0) 2021.03.09