FastAPI ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ผ ์์คํ ๊ธฐ๋ฐ์ผ๋ก ๋ผ์ฐํฐ๋ฅผ ์๋์ผ๋ก ๋ก๋ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
English | ํ๊ตญ์ด
- ๐ ํ์ผ ์์คํ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ ๋ผ์ฐํฐ ๋ก๋ฉ
- ๐ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๊ฐ API ๊ฒฝ๋ก๋ก ์๋ ๋งคํ
- ๐ฏ APIRouter ์ธ์คํด์ค๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ๋ฑ๋ก
- โ๏ธ ์ปค์คํ ํ๋ฆฌํฝ์ค ์ง์
- ๐ ์ค๋ณต ๋ผ์ฐํฐ ๋ฐฉ์ง
- ๐ฃ๏ธ ํจ์ค ํ๋ผ๋ฏธํฐ์ ๋ผ์ฐํธ ๊ทธ๋ฃน ์ง์
pip install fastapi-fs-routerfrom fastapi import FastAPI
from fastapi_fs_router import load_fs_router
app = FastAPI()
# routers ๋๋ ํ ๋ฆฌ์์ ๋ชจ๋ ๋ผ์ฐํฐ๋ฅผ ์๋์ผ๋ก ๋ก๋
load_fs_router(app, "routers")routers/
โโโ users.py # /users ๊ฒฝ๋ก๋ก ๋งคํ
โโโ items.py # /items ๊ฒฝ๋ก๋ก ๋งคํ
โโโ v1/
โโโ admin/
โโโ users.py # /v1/admin/users ๊ฒฝ๋ก๋ก ๋งคํ
# routers/users.py
from fastapi import APIRouter
router = APIRouter()
@router.get("/")
def get_users():
return {"users": []}
@router.get("/{user_id}")
def get_user(user_id: int):
return {"user_id": user_id}from fastapi import FastAPI
from fastapi_fs_router import load_fs_router
app = FastAPI()
# ๋ชจ๋ ๋ผ์ฐํฐ์ /api/v1 ํ๋ฆฌํฝ์ค ์ถ๊ฐ
load_fs_router(app, "routers", prefix="/api/v1")์ด ๊ฒฝ์ฐ ๋ผ์ฐํฐ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๋งคํ๋ฉ๋๋ค:
routers/users.pyโ/api/v1/usersrouters/v1/admin/users.pyโ/api/v1/v1/admin/usersrouters/(empty)/admin/users.pyโ/api/admin/usersrouters/hello_world/admin/hello_world.pyโ/hello-world/admin/hello-worldrouters/{path_param}/admin.pyโ/{path_param}/admin
- ํจ์คํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ธํ ์ธ๋์ค์ฝ์ด(
_)๋ ํ์ดํ(-)์ผ๋ก ๋ณํ๋ฉ๋๋ค - ๋๊ดํธ๋ก ๊ฐ์ธ์ง ๋ถ๋ถ์ ์ค๊ดํธ๋ก ๋ณํ๋ฉ๋๋ค (์:
[id]โ{id}) - ๊ดํธ๋ก ๊ฐ์ธ์ง ๋ถ๋ถ์ ๋ฌด์๋ฉ๋๋ค (์:
(empty))
FastAPI ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ผ ์์คํ ๊ธฐ๋ฐ ๋ผ์ฐํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
๋งค๊ฐ๋ณ์:
app(FastAPI): FastAPI ์ ํ๋ฆฌ์ผ์ด์ ์ธ์คํด์คroute_dir(Path | str): ๋ผ์ฐํฐ ํ์ผ๋ค์ด ์๋ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก (๊ธฐ๋ณธ๊ฐ: "routers")prefix(str): ๋ชจ๋ ๋ผ์ฐํฐ์ ์ถ๊ฐํ ํ๋ฆฌํฝ์ค (๊ธฐ๋ณธ๊ฐ: "")
๋์:
- ์ง์ ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํ์
.pyํ์ผ์์APIRouter์ธ์คํด์ค๋ฅผ ์ฐพ์- ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก API ๊ฒฝ๋ก ์์ฑ
- FastAPI ์ฑ์ ๋ผ์ฐํฐ ๋ฑ๋ก
# ๊ฐ๋ฐ ์์กด์ฑ ์ค์น
uv sync# ๋ชจ๋ ํ
์คํธ ์คํ
uv run pytest# ๋ฆฐํ
ruff check src/ tests/
# ํฌ๋งทํ
ruff format src/ tests/์ด ํ๋ก์ ํธ๋ ์ํ์น ๋ผ์ด์ ์ค 2.0 ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
๋ฒ๊ทธ ๋ฆฌํฌํธ, ๊ธฐ๋ฅ ์์ฒญ, ํ ๋ฆฌํ์คํธ๋ฅผ ํ์ํฉ๋๋ค! ๊ธฐ์ฌํ๊ธฐ ์ ์ ์ด์๋ฅผ ๋จผ์ ์์ฑํด ์ฃผ์ธ์.
- owjs3901 - ์ด๊ธฐ ์์ - owjs3901@gmail.com