의존성: 어떤 시점에 필요한 특정 정보. 대개는 정보가 필요한 시점에 바로 가져오는 코드를 작성
예를 들어 단순히 HTTP 요청을 통해 원하는 것을 필요할 때 얻고, 어떻게 정보를 얻었는지 알 필요 없는 구조는 꽤 합리적인 것으로 보인다. 하지만 이와 같은 구조는 아래와 같은 문제가 있다.
그래서 이건 어떤 거냐면, 필요한 특정 정보를 함수에 전달하는 것으로 수행되는 방법은 다음과 같다.
(전통적으로는)
1. 헬퍼 함수를 전달.
2. 이를 호출해 특정 데이터를 가져오는 것
의존성을 함수의 인자로 정의할 수 있다. 정의된 의존성은 FastAPI에 의해 자동으로 호출되고, 호출 결과는 반환되는 값을 인자로 전달한다.
from fastapi import FastAPI, Depends, Query
app = FastAPI()
#의존성 함수
def user_dep(name: str = Quert(...), gender: str = Query(...)):
# True일지 아닐지는 여기 부분에서 수정할 수 있고, 일단 여기서는 무조건 Tryu
return {"name": name, "valid": True}
# 경로 함수
@app.get("/user")
def get_user(user: dict = Depends(user_dep)) -> dict:
return user
여기서 user_dep이 의존성 함수다 . 이거는 웹 엔드포인트로 작용하는 것이 아니라 그냥 헬퍼 함수다.
get_user는 user라는 인자가 필요하고, 이 변수는 의존성 함수에서 값을 가져온다고 명시하고 있다.
의존성은 하나의 경로 함수, 또는 경로 함수 그룹, 또는 전체 웹 애플리케이션에 정의할 수 있다.
경로 스코프
#1안
def pathfunc(name: depfunc = Depends(depfunc)):
#2안
def pathfunc(name: depfunc = Depends()):
다중 경로 스코프
from fastAPI import FastAPI, Depends, APIRouter
router = APIRouter(..., dependencies=[Depends(depfunc)])
최상위 애플리케이션 하위에 둘이상의 라우터 객체를 정의해 더 큰 규모의 FastAPI 애플리케이션을 구성하는 방법
전역 스코프
from fastapi import FastAPI, Depends
def depfunc1():
pass
def depfunc2():
pass
app = FastAPI(dependencies=[Depends(depfunc1), Depends(depfunc2)])
@app.get("/main")
def get_main():
pass
이건 아예 최상위