[FastAPI] 종속성 > IT 기술백서

종속성 주입

라우트 함수 인자에 Depends 키워드를 사용하여 종속성을 해결할 수 있다.

종속성은 함수(또는 클래스)에서 하위 종속성을 중첩해서 사용할 수도 있다.

1. 함수로 종속성 사용하기

[code]

async def common_params(q: Optional[str] = None, skip:int = 0, limit: int = 100):

    return { “q”: q, “skip”: skip, “limit”: limit }

    

@app.get(“/items/”)

async def read_items(commons: dict = Depends(common_params)):

    return commons

[/code]

2. 클래스로 종속성 사용하기

[code]

class CommonParams:

    def __init__(self, q: Optional[str] = None, skip:int = 0, limit:int = 100):

        self.q = q

        self.skip = skip

        self.limit = limit

        

        

@app.get(“/items/”)

async def read_items(commons: CommonParams = Depends(CommonParams)):

    return commons

[/code]

3. 경로 데코레이터에 의존성주입

: 일반 종속성과 다른점은 반환값이 함수에 전달되지 않는다는 점이다

[code]

from fastapi import Depends, FastAPI, Header, HTTPException

app = FastAPI()

async def verify_token(x_token: str = Header(…)):

    if x_token != “fake-super-secret-token”:

        raise HTTPException(status_code=400, detail=”X-Token header invalid”)

        

async def verify_key(x_key: str = Header(…)):

    if x_key != “fake-super-secret-key”:

        raise HTTPException(status_code=400, detail=”X-Key header invliad”)

    return x_key # 전달되지 않는다

@app.get(“/items/”, dependencies=[Depends(verify_token), Depends(verify_key))

async def read_items():

    return [{“item”: “Foo”}, {“item”: “Bar”}]

[/code]

4. 전역종속성

: FastAPI 인스턴스 생성시 넣어주면 된다.

[code]

app = FastAPI(dependencies = [Depends(verify_token), Depends(verify_key)]

[/code]

5. yield 를 사용한 종속성

: 특히 Database 에서는 사용후 반드시 닫아줘야 하는 과정이 있는데 이때 사용하면 좋다.

[code]

async def get_db():

    db = DBSession()

    try:

        yield db

    finally:

        db.close() # 응답이 완료된 후 자동으로 닫아준다

[/code]

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤