궁금한게 많은 개발자 노트

[ Python ] FastAPI - Depends 본문

Back End

[ Python ] FastAPI - Depends

궁금한게 많은 개발자 2022. 6. 3. 15:07

FastAPI에서는 강력하고 직관적인 Dependency Injection system을 가지고 있습니다.

사용하기에 쉽고, 개발자로 하여금 FastAPI를 사용해 다른 컴포넌트들과 통합하기에 유용하도록 설계되었습니다.

 

Dependency Injection이란?

"Dependency Injection" means, in programming, that there is a way for your code (in this case, your path operation functions) to declare things that it requires to work and use: "dependencies".

And then, that system (in this case FastAPI) will take care of doing whatever is needed to provide your code with those needed dependencies ("inject" the dependencies).

This is very useful when you need to:

Have shared logic (the same code logic again and again).
Share database connections.
Enforce security, authentication, role requirements, etc.
And many other things...
All these, while minimizing code repetition.

 

https://fastapi.tiangolo.com/tutorial/dependencies/

 

Dependencies - First Steps - FastAPI

Dependencies - First Steps FastAPI has a very powerful but intuitive Dependency Injection system. It is designed to be very simple to use, and to make it very easy for any developer to integrate other components with FastAPI. What is "Dependency Injection"

fastapi.tiangolo.com

example)

from typing import Union

from fastapi import Depends, FastAPI

app = FastAPI()


async def common_parameters(
    q: Union[str, None] = 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_parameters)):
    return commons


@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
    return commons

위의 예시에서 볼 수 있듯, common_parameter라는 함수를 아래의 함수들의 parameter에 depends키워드를 통해 전달하면서, 값을 채워 넣을 수 있습니다.

선언한 변수에 값을 넣는 용도로 사용하는 depends라면 single parameter를 사용해 위처럼 사용합니다.

 

다른 예로는 어떤 클래스에 대한 객체를 parameter로 받을 때는 변수 명: ClassName = Depends()로 작성해주면, fastapi에서 (@app.get("/users/")에서 사용된다고 가정) 요청에 의해 받아온 변수들을 Class생성에 필요하면 자동으로 대입하여 instance를 생성해주는 강력한 기능입니다.

Class Dependency를 사용하면, 클래스 안에 여러 기능을 추가해서 넘길 수 있으므로 멤버변수가 key값이 되어 코드 작성 시에 자동 완성 기능을 사용할 수도 있습니다.

 

 

추가로, async함수이든 일반 def함수이든 Depends를 사용할 수 있습니다. 예를 들면 async def의 parameter에 def로 작성된 함수를 depends로 사용할 수 있습니다. 반대도 가능합니다.

As dependencies will also be called by FastAPI (the same as your path operation functions), the same rules apply while defining your functions.
You can use async def or normal def.
And you can declare dependencies with async def inside of normal def path operation functions, or def dependencies inside of async def path operation functions, etc.
It doesn't matter. FastAPI will know what to do.

 

 

 

 

 

'Back End' 카테고리의 다른 글

[ Spring ] Java Config, Configuration Annotation  (0) 2022.10.24
[ FastAPI ] Middleware에서 request body 사용 불가  (2) 2022.10.05
SQLalchemy  (0) 2022.05.26
[ Python ] pydantic  (0) 2022.05.24
[ Python ] 병렬 처리 concurrent future  (4) 2022.05.23
Comments