|
|
|
@ -17,16 +17,16 @@ Flask๋ฅผ ์ฌ์ฉํด ๋ณด์
จ๋ค๋ฉด, ์ด๋ Flask์ Blueprints์ ํด๋นํ๋ ๊ฐ |
|
|
|
``` |
|
|
|
. |
|
|
|
โโโ app |
|
|
|
โย ย โโโ __init__.py |
|
|
|
โย ย โโโ main.py |
|
|
|
โย ย โโโ dependencies.py |
|
|
|
โย ย โโโ routers |
|
|
|
โย ย โ โโโ __init__.py |
|
|
|
โย ย โ โโโ items.py |
|
|
|
โย ย โ โโโ users.py |
|
|
|
โย ย โโโ internal |
|
|
|
โย ย โโโ __init__.py |
|
|
|
โย ย โโโ admin.py |
|
|
|
โ โโโ __init__.py |
|
|
|
โ โโโ main.py |
|
|
|
โ โโโ dependencies.py |
|
|
|
โ โโโ routers |
|
|
|
โ โ โโโ __init__.py |
|
|
|
โ โ โโโ items.py |
|
|
|
โ โ โโโ users.py |
|
|
|
โ โโโ internal |
|
|
|
โ โโโ __init__.py |
|
|
|
โ โโโ admin.py |
|
|
|
``` |
|
|
|
|
|
|
|
/// tip | ํ |
|
|
|
@ -75,11 +75,11 @@ from app.routers import items |
|
|
|
|
|
|
|
์ฌ์ฉ์๋ง ์ฒ๋ฆฌํ๋ ์ ์ฉ ํ์ผ์ด `/app/routers/users.py`์ submodule์ด๋ผ๊ณ ํด๋ด
์๋ค. |
|
|
|
|
|
|
|
์ฝ๋๋ฅผ ์ ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ์์ ๊ด๋ จ๋ *path operations*๋ฅผ ๋๋จธ์ง ์ฝ๋์ ๋ถ๋ฆฌํด ๋๊ณ ์ถ์ ๊ฒ์
๋๋ค. |
|
|
|
์ฝ๋๋ฅผ ์ ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ์์ ๊ด๋ จ๋ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ฅผ ๋๋จธ์ง ์ฝ๋์ ๋ถ๋ฆฌํด ๋๊ณ ์ถ์ ๊ฒ์
๋๋ค. |
|
|
|
|
|
|
|
ํ์ง๋ง ์ด๊ฒ์ ์ฌ์ ํ ๊ฐ์ **FastAPI** ์ ํ๋ฆฌ์ผ์ด์
/์น API์ ์ผ๋ถ์
๋๋ค(๊ฐ์ "Python Package"์ ์ผ๋ถ์
๋๋ค). |
|
|
|
|
|
|
|
`APIRouter`๋ฅผ ์ฌ์ฉํด ํด๋น ๋ชจ๋์ *path operations*๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. |
|
|
|
`APIRouter`๋ฅผ ์ฌ์ฉํด ํด๋น ๋ชจ๋์ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
### `APIRouter` importํ๊ธฐ { #import-apirouter } |
|
|
|
|
|
|
|
@ -87,9 +87,9 @@ from app.routers import items |
|
|
|
|
|
|
|
{* ../../docs_src/bigger_applications/app_an_py310/routers/users.py hl[1,3] title["app/routers/users.py"] *} |
|
|
|
|
|
|
|
### `APIRouter`๋ก *path operations* ๋ง๋ค๊ธฐ { #path-operations-with-apirouter } |
|
|
|
### `APIRouter`๋ก *๊ฒฝ๋ก ์ฒ๋ฆฌ* ๋ง๋ค๊ธฐ { #path-operations-with-apirouter } |
|
|
|
|
|
|
|
๊ทธ ๋ค์ ์ด๋ฅผ ์ฌ์ฉํด *path operations*๋ฅผ ์ ์ธํฉ๋๋ค. |
|
|
|
๊ทธ ๋ค์ ์ด๋ฅผ ์ฌ์ฉํด *๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ฅผ ์ ์ธํฉ๋๋ค. |
|
|
|
|
|
|
|
`FastAPI` ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํฉ๋๋ค: |
|
|
|
|
|
|
|
@ -107,7 +107,7 @@ from app.routers import items |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
์ด์ ์ด `APIRouter`๋ฅผ ๋ฉ์ธ `FastAPI` ์ฑ์ ํฌํจ(include)ํ ๊ฒ์ด์ง๋ง, ๋จผ์ dependencies์ ๋ค๋ฅธ `APIRouter` ํ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. |
|
|
|
์ด์ ์ด `APIRouter`๋ฅผ ๋ฉ์ธ `FastAPI` ์ ํ๋ฆฌ์ผ์ด์
์ ํฌํจ(include)ํ ๊ฒ์ด์ง๋ง, ๋จผ์ dependencies์ ๋ค๋ฅธ `APIRouter` ํ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. |
|
|
|
|
|
|
|
## Dependencies { #dependencies } |
|
|
|
|
|
|
|
@ -131,7 +131,7 @@ from app.routers import items |
|
|
|
|
|
|
|
์ ํ๋ฆฌ์ผ์ด์
์ "items"๋ฅผ ์ฒ๋ฆฌํ๋ ์ ์ฉ endpoint๋ค๋ `app/routers/items.py` ๋ชจ๋์ ์๋ค๊ณ ํด๋ด
์๋ค. |
|
|
|
|
|
|
|
์ฌ๊ธฐ์๋ ๋ค์์ ๋ํ *path operations*๊ฐ ์์ต๋๋ค: |
|
|
|
์ฌ๊ธฐ์๋ ๋ค์์ ๋ํ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๊ฐ ์์ต๋๋ค: |
|
|
|
|
|
|
|
* `/items/` |
|
|
|
* `/items/{item_id}` |
|
|
|
@ -140,18 +140,18 @@ from app.routers import items |
|
|
|
|
|
|
|
ํ์ง๋ง ์ฐ๋ฆฌ๋ ์กฐ๊ธ ๋ ๋๋ํ๊ฒ, ์ฝ๋๋ฅผ ์ฝ๊ฐ ๋จ์ํํ๊ณ ์ถ์ต๋๋ค. |
|
|
|
|
|
|
|
์ด ๋ชจ๋์ ๋ชจ๋ *path operations*์๋ ๋ค์์ด ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค: |
|
|
|
์ด ๋ชจ๋์ ๋ชจ๋ *๊ฒฝ๋ก ์ฒ๋ฆฌ*์๋ ๋ค์์ด ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค: |
|
|
|
|
|
|
|
* ๊ฒฝ๋ก `prefix`: `/items`. |
|
|
|
* `tags`: (ํ๊ทธ ํ๋: `items`). |
|
|
|
* ์ถ๊ฐ `responses`. |
|
|
|
* `dependencies`: ๋ชจ๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ `X-Token` dependency๊ฐ ํ์ํฉ๋๋ค. |
|
|
|
|
|
|
|
๋ฐ๋ผ์ ๊ฐ *path operation*๋ง๋ค ๋งค๋ฒ ๋ชจ๋ ์ถ๊ฐํ๋ ๋์ , `APIRouter`์ ํ ๋ฒ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. |
|
|
|
๋ฐ๋ผ์ ๊ฐ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ง๋ค ๋งค๋ฒ ๋ชจ๋ ์ถ๊ฐํ๋ ๋์ , `APIRouter`์ ํ ๋ฒ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[5:10,16,21] title["app/routers/items.py"] *} |
|
|
|
|
|
|
|
๊ฐ *path operation*์ ๊ฒฝ๋ก๋ ๋ค์์ฒ๋ผ `/`๋ก ์์ํด์ผ ํ๋ฏ๋ก: |
|
|
|
๊ฐ *๊ฒฝ๋ก ์ฒ๋ฆฌ*์ ๊ฒฝ๋ก๋ ๋ค์์ฒ๋ผ `/`๋ก ์์ํด์ผ ํ๋ฏ๋ก: |
|
|
|
|
|
|
|
```Python hl_lines="1" |
|
|
|
@router.get("/{item_id}") |
|
|
|
@ -163,13 +163,13 @@ async def read_item(item_id: str): |
|
|
|
|
|
|
|
๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ prefix๋ `/items`์
๋๋ค. |
|
|
|
|
|
|
|
๋ํ ์ด router์ ํฌํจ๋ ๋ชจ๋ *path operations*์ ์ ์ฉ๋ `tags` ๋ชฉ๋ก๊ณผ ์ถ๊ฐ `responses`๋ ๋ฃ์ ์ ์์ต๋๋ค. |
|
|
|
๋ํ ์ด router์ ํฌํจ๋ ๋ชจ๋ *๊ฒฝ๋ก ์ฒ๋ฆฌ*์ ์ ์ฉ๋ `tags` ๋ชฉ๋ก๊ณผ ์ถ๊ฐ `responses`๋ ๋ฃ์ ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
๊ทธ๋ฆฌ๊ณ router์ ๋ชจ๋ *path operations*์ ์ถ๊ฐ๋ `dependencies` ๋ชฉ๋ก๋ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ํด๋น ๊ฒฝ๋ก๋ค๋ก ๋ค์ด์ค๋ ๊ฐ ์์ฒญ๋ง๋ค ์คํ/ํด๊ฒฐ๋ฉ๋๋ค. |
|
|
|
๊ทธ๋ฆฌ๊ณ router์ ๋ชจ๋ *๊ฒฝ๋ก ์ฒ๋ฆฌ*์ ์ถ๊ฐ๋ `dependencies` ๋ชฉ๋ก๋ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ํด๋น ๊ฒฝ๋ก๋ค๋ก ๋ค์ด์ค๋ ๊ฐ ์์ฒญ๋ง๋ค ์คํ/ํด๊ฒฐ๋ฉ๋๋ค. |
|
|
|
|
|
|
|
/// tip | ํ |
|
|
|
|
|
|
|
[*path operation decorator์ dependencies*](dependencies/dependencies-in-path-operation-decorators.md)์ ๋ง์ฐฌ๊ฐ์ง๋ก, *path operation function*์ ์ด๋ค ๊ฐ๋ ์ ๋ฌ๋์ง ์์ต๋๋ค. |
|
|
|
[*๊ฒฝ๋ก ์ฒ๋ฆฌ ๋ฐ์ฝ๋ ์ดํฐ*์ dependencies](dependencies/dependencies-in-path-operation-decorators.md)์ ๋ง์ฐฌ๊ฐ์ง๋ก, *๊ฒฝ๋ก ์ฒ๋ฆฌ ํจ์*์ ์ด๋ค ๊ฐ๋ ์ ๋ฌ๋์ง ์์ต๋๋ค. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
@ -183,14 +183,14 @@ async def read_item(item_id: str): |
|
|
|
* ๋จ์ผ ๋ฌธ์์ด `"items"`๋ฅผ ํฌํจํ๋ ํ๊ทธ ๋ชฉ๋ก์ผ๋ก ํ์๋ฉ๋๋ค. |
|
|
|
* ์ด "tags"๋ ์๋ ๋ํํ ๋ฌธ์ ์์คํ
(OpenAPI ์ฌ์ฉ)์ ํนํ ์ ์ฉํฉ๋๋ค. |
|
|
|
* ๋ชจ๋ ๋ฏธ๋ฆฌ ์ ์๋ `responses`๋ฅผ ํฌํจํฉ๋๋ค. |
|
|
|
* ์ด ๋ชจ๋ *path operations*๋ ์คํ๋๊ธฐ ์ ์ `dependencies` ๋ชฉ๋ก์ด ํ๊ฐ/์คํ๋ฉ๋๋ค. |
|
|
|
* ํน์ *path operation*์ dependencies๋ฅผ ์ถ๊ฐ๋ก ์ ์ธํ๋ฉด **๊ทธ๊ฒ๋ค๋ ์คํ๋ฉ๋๋ค**. |
|
|
|
* router dependencies๊ฐ ๋จผ์ ์คํ๋๊ณ , ๊ทธ ๋ค์์ [decorator์ `dependencies`](dependencies/dependencies-in-path-operation-decorators.md), ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ ํ๋ผ๋ฏธํฐ dependencies๊ฐ ์คํ๋ฉ๋๋ค. |
|
|
|
* ์ด ๋ชจ๋ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ ์คํ๋๊ธฐ ์ ์ `dependencies` ๋ชฉ๋ก์ด ํ๊ฐ/์คํ๋ฉ๋๋ค. |
|
|
|
* ํน์ *๊ฒฝ๋ก ์ฒ๋ฆฌ*์ dependencies๋ฅผ ์ถ๊ฐ๋ก ์ ์ธํ๋ฉด **๊ทธ๊ฒ๋ค๋ ์คํ๋ฉ๋๋ค**. |
|
|
|
* router dependencies๊ฐ ๋จผ์ ์คํ๋๊ณ , ๊ทธ ๋ค์์ [๋ฐ์ฝ๋ ์ดํฐ์ `dependencies`](dependencies/dependencies-in-path-operation-decorators.md), ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ ํ๋ผ๋ฏธํฐ dependencies๊ฐ ์คํ๋ฉ๋๋ค. |
|
|
|
* [`scopes`๊ฐ ์๋ `Security` dependencies](../advanced/security/oauth2-scopes.md)๋ ์ถ๊ฐํ ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
/// tip | ํ |
|
|
|
|
|
|
|
`APIRouter`์ `dependencies`๋ฅผ ๋๋ ๊ฒ์ ์๋ฅผ ๋ค์ด ์ ์ฒด *path operations* ๊ทธ๋ฃน์ ์ธ์ฆ์ ์๊ตฌํ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ ๊ฒฝ๋ก ์ฒ๋ฆฌ์ ๊ฐ๋ณ์ ์ผ๋ก dependencies๋ฅผ ์ถ๊ฐํ์ง ์์๋ ๋ฉ๋๋ค. |
|
|
|
`APIRouter`์ `dependencies`๋ฅผ ๋๋ ๊ฒ์ ์๋ฅผ ๋ค์ด ์ ์ฒด *๊ฒฝ๋ก ์ฒ๋ฆฌ* ๊ทธ๋ฃน์ ์ธ์ฆ์ ์๊ตฌํ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ ๊ฒฝ๋ก ์ฒ๋ฆฌ์ ๊ฐ๋ณ์ ์ผ๋ก dependencies๋ฅผ ์ถ๊ฐํ์ง ์์๋ ๋ฉ๋๋ค. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
@ -232,7 +232,7 @@ from .dependencies import get_token_header |
|
|
|
|
|
|
|
ํ์ง๋ง ๊ทธ ํ์ผ์ ์กด์ฌํ์ง ์์ต๋๋ค. dependencies๋ `app/dependencies.py` ํ์ผ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
์ฐ๋ฆฌ ์ฑ/ํ์ผ ๊ตฌ์กฐ๋ฅผ ๋ค์ ๋ ์ฌ๋ ค ๋ณด์ธ์: |
|
|
|
์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
/ํ์ผ ๊ตฌ์กฐ๋ฅผ ๋ค์ ๋ ์ฌ๋ ค ๋ณด์ธ์: |
|
|
|
|
|
|
|
<img src="/img/tutorial/bigger-applications/package.drawio.svg"> |
|
|
|
|
|
|
|
@ -271,13 +271,13 @@ from ...dependencies import get_token_header |
|
|
|
|
|
|
|
์ด๋ `app/` ์์ชฝ์ ์ด๋ค package(์์ ์ `__init__.py` ํ์ผ ๋ฑ์ ๊ฐ์ง)์ ๋ํ ์ฐธ์กฐ๊ฐ ๋ฉ๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ๊ทธ๋ฐ ๊ฒ์ด ์์ต๋๋ค. ๊ทธ๋์ ์ด ์์์์๋ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๐จ |
|
|
|
|
|
|
|
์ด์ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์์ผ๋, ์ฑ์ด ์ผ๋ง๋ ๋ณต์กํ๋ ์๋ import๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๐ค |
|
|
|
์ด์ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์์ผ๋, ์ ํ๋ฆฌ์ผ์ด์
์ด ์ผ๋ง๋ ๋ณต์กํ๋ ์๋ import๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๐ค |
|
|
|
|
|
|
|
### ์ปค์คํ
`tags`, `responses`, `dependencies` ์ถ๊ฐํ๊ธฐ { #add-some-custom-tags-responses-and-dependencies } |
|
|
|
|
|
|
|
`APIRouter`์ ์ด๋ฏธ prefix `/items`์ `tags=["items"]`๋ฅผ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ฐ *path operation*์ ์ด๋ฅผ ์ถ๊ฐํ์ง ์์ต๋๋ค. |
|
|
|
`APIRouter`์ ์ด๋ฏธ prefix `/items`์ `tags=["items"]`๋ฅผ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ฐ *๊ฒฝ๋ก ์ฒ๋ฆฌ*์ ์ด๋ฅผ ์ถ๊ฐํ์ง ์์ต๋๋ค. |
|
|
|
|
|
|
|
ํ์ง๋ง ํน์ *path operation*์๋ง ์ ์ฉ๋ _์ถ๊ฐ_ `tags`๋ฅผ ๋ํ ์๋ ์๊ณ , ๊ทธ *path operation* ์ ์ฉ์ ์ถ๊ฐ `responses`๋ ๋ฃ์ ์ ์์ต๋๋ค: |
|
|
|
ํ์ง๋ง ํน์ *๊ฒฝ๋ก ์ฒ๋ฆฌ*์๋ง ์ ์ฉ๋ _์ถ๊ฐ_ `tags`๋ฅผ ๋ํ ์๋ ์๊ณ , ๊ทธ *๊ฒฝ๋ก ์ฒ๋ฆฌ* ์ ์ฉ์ ์ถ๊ฐ `responses`๋ ๋ฃ์ ์ ์์ต๋๋ค: |
|
|
|
|
|
|
|
{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[30:31] title["app/routers/items.py"] *} |
|
|
|
|
|
|
|
@ -416,13 +416,13 @@ router๋ฅผ ํฌํจ(include)ํ ๋ ์ฑ๋ฅ์ ๊ฑฑ์ ํ ํ์๋ ์์ต๋๋ค. |
|
|
|
|
|
|
|
์ด์ ์กฐ์ง์์ `app/internal/admin.py` ํ์ผ์ ๋ฐ์๋ค๊ณ ๊ฐ์ ํด ๋ด
์๋ค. |
|
|
|
|
|
|
|
์ฌ๊ธฐ์๋ ์กฐ์ง์์ ์ฌ๋ฌ ํ๋ก์ ํธ ๊ฐ์ ๊ณต์ ํ๋ ๊ด๋ฆฌ์์ฉ *path operations*๊ฐ ์๋ `APIRouter`๊ฐ ๋ค์ด ์์ต๋๋ค. |
|
|
|
์ฌ๊ธฐ์๋ ์กฐ์ง์์ ์ฌ๋ฌ ํ๋ก์ ํธ ๊ฐ์ ๊ณต์ ํ๋ ๊ด๋ฆฌ์์ฉ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๊ฐ ์๋ `APIRouter`๊ฐ ๋ค์ด ์์ต๋๋ค. |
|
|
|
|
|
|
|
์ด ์์์์๋ ๋งค์ฐ ๋จ์ํ๊ฒ ๋ง๋ค๊ฒ ์ต๋๋ค. ํ์ง๋ง ์กฐ์ง ๋ด ๋ค๋ฅธ ํ๋ก์ ํธ์ ๊ณต์ ๋๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ์์ ํ ์ ์์ด `prefix`, `dependencies`, `tags` ๋ฑ์ `APIRouter`์ ์ง์ ์ถ๊ฐํ ์ ์๋ค๊ณ ํด๋ด
์๋ค: |
|
|
|
|
|
|
|
{* ../../docs_src/bigger_applications/app_an_py310/internal/admin.py hl[3] title["app/internal/admin.py"] *} |
|
|
|
|
|
|
|
ํ์ง๋ง `APIRouter`๋ฅผ ํฌํจํ ๋ ์ปค์คํ
`prefix`๋ฅผ ์ง์ ํด ๋ชจ๋ *path operations*๊ฐ `/admin`์ผ๋ก ์์ํ๊ฒ ํ๊ณ , ์ด ํ๋ก์ ํธ์์ ์ด๋ฏธ ๊ฐ์ง `dependencies`๋ก ๋ณดํธํ๊ณ , `tags`์ `responses`๋ ํฌํจํ๊ณ ์ถ์ต๋๋ค. |
|
|
|
ํ์ง๋ง `APIRouter`๋ฅผ ํฌํจํ ๋ ์ปค์คํ
`prefix`๋ฅผ ์ง์ ํด ๋ชจ๋ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๊ฐ `/admin`์ผ๋ก ์์ํ๊ฒ ํ๊ณ , ์ด ํ๋ก์ ํธ์์ ์ด๋ฏธ ๊ฐ์ง `dependencies`๋ก ๋ณดํธํ๊ณ , `tags`์ `responses`๋ ํฌํจํ๊ณ ์ถ์ต๋๋ค. |
|
|
|
|
|
|
|
์๋ `APIRouter`๋ฅผ ์์ ํ์ง ์๊ณ ๋ `app.include_router()`์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํด์ ์ด๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค: |
|
|
|
|
|
|
|
@ -430,26 +430,26 @@ router๋ฅผ ํฌํจ(include)ํ ๋ ์ฑ๋ฅ์ ๊ฑฑ์ ํ ํ์๋ ์์ต๋๋ค. |
|
|
|
|
|
|
|
์ด๋ ๊ฒ ํ๋ฉด ์๋ `APIRouter`๋ ์์ ๋์ง ์์ผ๋ฏ๋ก, ์กฐ์ง ๋ด ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ ๋์ผํ `app/internal/admin.py` ํ์ผ์ ๊ณ์ ๊ณต์ ํ ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ ์ฑ์์ `admin` ๋ชจ๋์ ๊ฐ *path operations*๋ ๋ค์์ ๊ฐ๊ฒ ๋ฉ๋๋ค: |
|
|
|
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
์์ `admin` ๋ชจ๋์ ๊ฐ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ ๋ค์์ ๊ฐ๊ฒ ๋ฉ๋๋ค: |
|
|
|
|
|
|
|
* prefix `/admin`. |
|
|
|
* tag `admin`. |
|
|
|
* dependency `get_token_header`. |
|
|
|
* ์๋ต `418`. ๐ต |
|
|
|
|
|
|
|
ํ์ง๋ง ์ด๋ ์ฐ๋ฆฌ ์ฑ์์ ๊ทธ `APIRouter`์๋ง ์ํฅ์ ์ฃผ๋ฉฐ, ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฝ๋์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. |
|
|
|
ํ์ง๋ง ์ด๋ ์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ทธ `APIRouter`์๋ง ์ํฅ์ ์ฃผ๋ฉฐ, ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฝ๋์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. |
|
|
|
|
|
|
|
๋ฐ๋ผ์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ค์ ๊ฐ์ `APIRouter`๋ฅผ ๋ค๋ฅธ ์ธ์ฆ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์๋ ์์ต๋๋ค. |
|
|
|
|
|
|
|
### *path operation* ํฌํจํ๊ธฐ { #include-a-path-operation } |
|
|
|
### *๊ฒฝ๋ก ์ฒ๋ฆฌ* ํฌํจํ๊ธฐ { #include-a-path-operation } |
|
|
|
|
|
|
|
*path operations*๋ฅผ `FastAPI` ์ฑ์ ์ง์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. |
|
|
|
*๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ฅผ `FastAPI` ์ ํ๋ฆฌ์ผ์ด์
์ ์ง์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. |
|
|
|
|
|
|
|
์ฌ๊ธฐ์๋ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด... ๊ทธ๋ฅ ํด๋ด
๋๋ค ๐คท: |
|
|
|
|
|
|
|
{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[21:23] title["app/main.py"] *} |
|
|
|
|
|
|
|
๊ทธ๋ฆฌ๊ณ `app.include_router()`๋ก ์ถ๊ฐํ ๋ค๋ฅธ ๋ชจ๋ *path operations*์ ํจ๊ป ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํฉ๋๋ค. |
|
|
|
๊ทธ๋ฆฌ๊ณ `app.include_router()`๋ก ์ถ๊ฐํ ๋ค๋ฅธ ๋ชจ๋ *๊ฒฝ๋ก ์ฒ๋ฆฌ*์ ํจ๊ป ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํฉ๋๋ค. |
|
|
|
|
|
|
|
/// note | ๋งค์ฐ ๊ธฐ์ ์ ์ธ ์ธ๋ถ์ฌํญ |
|
|
|
|
|
|
|
@ -459,9 +459,9 @@ router๋ฅผ ํฌํจ(include)ํ ๋ ์ฑ๋ฅ์ ๊ฑฑ์ ํ ํ์๋ ์์ต๋๋ค. |
|
|
|
|
|
|
|
`APIRouter`๋ "mount"๋๋ ๊ฒ์ด ์๋๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์
์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ๊ฒฉ๋ฆฌ๋์ด ์์ง ์์ต๋๋ค. |
|
|
|
|
|
|
|
์ด๋ OpenAPI ์คํค๋ง์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๊ทธ๋ค์ *path operations*๋ฅผ ํฌํจ์ํค๊ธฐ ์ํจ์
๋๋ค. |
|
|
|
์ด๋ OpenAPI ์คํค๋ง์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๊ทธ๋ค์ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ฅผ ํฌํจ์ํค๊ธฐ ์ํจ์
๋๋ค. |
|
|
|
|
|
|
|
FastAPI๋ ์๋์ router์ *path operations*๋ฅผ ํ์ฑ ์ํ๋ก ์ ์งํ๊ณ , ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ OpenAPI๋ฅผ ์์ฑํ ๋ router์ prefix, dependencies, tags, responses ๋ฐ ๊ธฐํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํฉ๋๋ค. |
|
|
|
FastAPI๋ ์๋์ router์ ๊ฒฝ๋ก ์ฒ๋ฆฌ๋ฅผ ํ์ฑ ์ํ๋ก ์ ์งํ๊ณ , ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ OpenAPI๋ฅผ ์์ฑํ ๋ router์ prefix, dependencies, tags, responses ๋ฐ ๊ธฐํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํฉ๋๋ค. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
@ -480,7 +480,7 @@ entrypoint = "app.main:app" |
|
|
|
from app.main import app |
|
|
|
``` |
|
|
|
|
|
|
|
์ด๋ ๊ฒ ํ๋ฉด `fastapi` ๋ช
๋ น์ด๊ฐ ์ฌ๋ฌ๋ถ์ ์ฑ์ด ์ด๋์ ์๋์ง ์ ์ ์์ต๋๋ค. |
|
|
|
์ด๋ ๊ฒ ํ๋ฉด `fastapi` ๋ช
๋ น์ด๊ฐ ์ฌ๋ฌ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ด๋์ ์๋์ง ์ ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
/// Note | ์ฐธ๊ณ |
|
|
|
|
|
|
|
@ -498,7 +498,7 @@ $ fastapi dev app/main.py |
|
|
|
|
|
|
|
## ์๋ API ๋ฌธ์ ํ์ธํ๊ธฐ { #check-the-automatic-api-docs } |
|
|
|
|
|
|
|
์ด์ ์ฑ์ ์คํํ์ธ์: |
|
|
|
์ด์ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ์ธ์: |
|
|
|
|
|
|
|
<div class="termy"> |
|
|
|
|
|
|
|
@ -532,16 +532,16 @@ $ fastapi dev |
|
|
|
router.include_router(other_router) |
|
|
|
``` |
|
|
|
|
|
|
|
`router`๋ฅผ `FastAPI` ์ฑ์ ํฌํจํ๊ธฐ ์ ์ด๋ ํ๋ , ์ด๋ ์์ ์ ํด๋ ๋ฉ๋๋ค. FastAPI๋ ๋ผ์ฐํ
๊ณผ OpenAPI์ `other_router`์ *path operations*๋ ํฌํจํฉ๋๋ค. |
|
|
|
`router`๋ฅผ `FastAPI` ์ ํ๋ฆฌ์ผ์ด์
์ ํฌํจํ๊ธฐ ์ ์ด๋ ํ๋ , ์ด๋ ์์ ์ ํด๋ ๋ฉ๋๋ค. FastAPI๋ ๋ผ์ฐํ
๊ณผ OpenAPI์ `other_router`์ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ ํฌํจํฉ๋๋ค. |
|
|
|
|
|
|
|
๋์ค์ router๋ค์ ์ถ๊ฐ๋ *path operations*๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค. ์ด์ ์ ์ํํ ํฌํจ์ ํตํด์๋ ๋ณด์ด๊ฒ ๋ฉ๋๋ค. |
|
|
|
๋์ค์ router๋ค์ ์ถ๊ฐ๋ *๊ฒฝ๋ก ์ฒ๋ฆฌ*๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค. ์ด์ ์ ์ํํ ํฌํจ์ ํตํด์๋ ๋ณด์ด๊ฒ ๋ฉ๋๋ค. |
|
|
|
|
|
|
|
/// warning | ๊ธฐ์ ์ธ๋ถ์ฌํญ |
|
|
|
|
|
|
|
router๋ฅผ ํฌํจํ ๋ค์ `router.routes`๋ฅผ ์ง์ ๋ณํํ๋ ๊ฒ์ ํผํ์ธ์. FastAPI๋ router ํฌํจ์ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก, ์๋ router์ ๊ทธ routes๋ ๋ผ์ฐํ
๊ณผ OpenAPI ์์ฑ์ ์ผ๋ถ๋ก ๋จ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
๊ฒฝ๋ก์ router๋ฅผ ์ถ๊ฐํ ๋๋ path operation ๋ฐ์ฝ๋ ์ดํฐ์ `.include_router()` ๊ฐ์ ๋ฌธ์ํ๋ API๋ฅผ ์ฌ์ฉํ์ธ์. |
|
|
|
๊ฒฝ๋ก์ router๋ฅผ ์ถ๊ฐํ ๋๋ ๊ฒฝ๋ก ์ฒ๋ฆฌ ๋ฐ์ฝ๋ ์ดํฐ์ `.include_router()` ๊ฐ์ ๋ฌธ์ํ๋ API๋ฅผ ์ฌ์ฉํ์ธ์. |
|
|
|
|
|
|
|
`router.routes`๋ ์ต์ข
*path operations*์ ํํํ๋ ๋ชฉ๋ก์ด ์๋๋ผ, route ์ ์์ ํฌํจ๋ router๋ฅผ ๋ด๋ ํ์ ์์ค์ ํธ๋ฆฌ๋ก ์ทจ๊ธํ๊ณ , ์ฌ๊ธฐ์ ์์กดํ์ง ๋ง์ธ์. |
|
|
|
`router.routes`๋ ์ต์ข
*๊ฒฝ๋ก ์ฒ๋ฆฌ*์ ํํํ๋ ๋ชฉ๋ก์ด ์๋๋ผ, route ์ ์์ ํฌํจ๋ router๋ฅผ ๋ด๋ ํ์ ์์ค์ ํธ๋ฆฌ๋ก ์ทจ๊ธํ๊ณ , ์ฌ๊ธฐ์ ์์กดํ์ง ๋ง์ธ์. |
|
|
|
|
|
|
|
/// |
|
|
|
|