🦏 🈸 - 💗 📁¶
🚥 👆 🏗 🈸 ⚖️ 🕸 🛠️, ⚫️ 🛎 💼 👈 👆 💪 🚮 🌐 🔛 👁 📁.
FastAPI 🚚 🏪 🧰 📊 👆 🈸 ⏪ 🚧 🌐 💪.
Info
🚥 👆 👟 ⚪️➡️ 🏺, 👉 🔜 🌓 🏺 📗.
🖼 📁 📊¶
➡️ 💬 👆 ✔️ 📁 📊 💖 👉:
.
├── app
│ ├── __init__.py
│ ├── main.py
│ ├── dependencies.py
│ └── routers
│ │ ├── __init__.py
│ │ ├── items.py
│ │ └── users.py
│ └── internal
│ ├── __init__.py
│ └── admin.py
Tip
📤 📚 __init__.py 📁: 1️⃣ 🔠 📁 ⚖️ 📁.
👉 ⚫️❔ ✔ 🏭 📟 ⚪️➡️ 1️⃣ 📁 🔘 ➕1️⃣.
🖼, app/main.py 👆 💪 ✔️ ⏸ 💖:
from app.routers import items
app📁 🔌 🌐. & ⚫️ ✔️ 🛁 📁app/__init__.py, ⚫️ "🐍 📦" (🗃 "🐍 🕹"):app.- ⚫️ 🔌
app/main.py📁. ⚫️ 🔘 🐍 📦 (📁 ⏮️ 📁__init__.py), ⚫️ "🕹" 👈 📦:app.main. - 📤
app/dependencies.py📁, 💖app/main.py, ⚫️ "🕹":app.dependencies. - 📤 📁
app/routers/⏮️ ➕1️⃣ 📁__init__.py, ⚫️ "🐍 📦":app.routers. - 📁
app/routers/items.py🔘 📦,app/routers/,, ⚫️ 🔁:app.routers.items. - 🎏 ⏮️
app/routers/users.py, ⚫️ ➕1️⃣ 🔁:app.routers.users. - 📤 📁
app/internal/⏮️ ➕1️⃣ 📁__init__.py, ⚫️ ➕1️⃣ "🐍 📦":app.internal. - & 📁
app/internal/admin.py➕1️⃣ 🔁:app.internal.admin.
🎏 📁 📊 ⏮️ 🏤:
.
├── app # "app" is a Python package
│ ├── __init__.py # this file makes "app" a "Python package"
│ ├── main.py # "main" module, e.g. import app.main
│ ├── dependencies.py # "dependencies" module, e.g. import app.dependencies
│ └── routers # "routers" is a "Python subpackage"
│ │ ├── __init__.py # makes "routers" a "Python subpackage"
│ │ ├── items.py # "items" submodule, e.g. import app.routers.items
│ │ └── users.py # "users" submodule, e.g. import app.routers.users
│ └── internal # "internal" is a "Python subpackage"
│ ├── __init__.py # makes "internal" a "Python subpackage"
│ └── admin.py # "admin" submodule, e.g. import app.internal.admin
APIRouter¶
➡️ 💬 📁 💡 🚚 👩💻 🔁 /app/routers/users.py.
👆 💚 ✔️ ➡ 🛠️ 🔗 👆 👩💻 👽 ⚪️➡️ 🎂 📟, 🚧 ⚫️ 🏗.
✋️ ⚫️ 🍕 🎏 FastAPI 🈸/🕸 🛠️ (⚫️ 🍕 🎏 "🐍 📦").
👆 💪 ✍ ➡ 🛠️ 👈 🕹 ⚙️ APIRouter.
🗄 APIRouter¶
👆 🗄 ⚫️ & ✍ "👐" 🎏 🌌 👆 🔜 ⏮️ 🎓 FastAPI:
from fastapi import APIRouter
router = APIRouter()
@router.get("/users/", tags=["users"])
async def read_users():
return [{"username": "Rick"}, {"username": "Morty"}]
@router.get("/users/me", tags=["users"])
async def read_user_me():
return {"username": "fakecurrentuser"}
@router.get("/users/{username}", tags=["users"])
async def read_user(username: str):
return {"username": username}
➡ 🛠️ ⏮️ APIRouter¶
& ⤴️ 👆 ⚙️ ⚫️ 📣 👆 ➡ 🛠️.
⚙️ ⚫️ 🎏 🌌 👆 🔜 ⚙️ FastAPI 🎓:
from fastapi import APIRouter
router = APIRouter()
@router.get("/users/", tags=["users"])
async def read_users():
return [{"username": "Rick"}, {"username": "Morty"}]
@router.get("/users/me", tags=["users"])
async def read_user_me():
return {"username": "fakecurrentuser"}
@router.get("/users/{username}", tags=["users"])
async def read_user(username: str):
return {"username": username}
👆 💪 💭 APIRouter "🐩 FastAPI" 🎓.
🌐 🎏 🎛 🐕🦺.
🌐 🎏 parameters, responses, dependencies, tags, ♒️.
Tip
👉 🖼, 🔢 🤙 router, ✋️ 👆 💪 📛 ⚫️ 👐 👆 💚.
👥 🔜 🔌 👉 APIRouter 👑 FastAPI 📱, ✋️ 🥇, ➡️ ✅ 🔗 & ➕1️⃣ APIRouter.
🔗¶
👥 👀 👈 👥 🔜 💪 🔗 ⚙️ 📚 🥉 🈸.
👥 🚮 👫 👫 👍 dependencies 🕹 (app/dependencies.py).
👥 🔜 🔜 ⚙️ 🙅 🔗 ✍ 🛃 X-Token 🎚:
from fastapi import Header, HTTPException
async def get_token_header(x_token: str = Header()):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
async def get_query_token(token: str):
if token != "jessica":
raise HTTPException(status_code=400, detail="No Jessica token provided")
➕1️⃣ 🕹 ⏮️ APIRouter¶
➡️ 💬 👆 ✔️ 🔗 💡 🚚 "🏬" ⚪️➡️ 👆 🈸 🕹 app/routers/items.py.
👆 ✔️ ➡ 🛠️ :
/items//items/{item_id}
⚫️ 🌐 🎏 📊 ⏮️ app/routers/users.py.
✋️ 👥 💚 🙃 & 📉 📟 🍖.
👥 💭 🌐 ➡ 🛠️ 👉 🕹 ✔️ 🎏:
- ➡
prefix:/items. tags: (1️⃣ 🔖:items).- ➕
responses. dependencies: 👫 🌐 💪 👈X-Token🔗 👥 ✍.
, ↩️ ❎ 🌐 👈 🔠 ➡ 🛠️, 👥 💪 🚮 ⚫️ APIRouter.
from fastapi import APIRouter, Depends, HTTPException
from ..dependencies import get_token_header
router = APIRouter(
prefix="/items",
tags=["items"],
dependencies=[Depends(get_token_header)],
responses={404: {"description": "Not found"}},
)
fake_items_db = {"plumbus": {"name": "Plumbus"}, "gun": {"name": "Portal Gun"}}
@router.get("/")
async def read_items():
return fake_items_db
@router.get("/{item_id}")
async def read_item(item_id: str):
if item_id not in fake_items_db:
raise HTTPException(status_code=404, detail="Item not found")
return {"name": fake_items_db[item_id]["name"], "item_id": item_id}
@router.put(
"/{item_id}",
tags=["custom"],
responses={403: {"description": "Operation forbidden"}},
)
async def update_item(item_id: str):
if item_id != "plumbus":
raise HTTPException(
status_code=403, detail="You can only update the item: plumbus"
)
return {"item_id": item_id, "name": "The great Plumbus"}
➡ 🔠 ➡ 🛠️ ✔️ ▶️ ⏮️ /, 💖:
@router.get("/{item_id}")
async def read_item(item_id: str):
...
...🔡 🔜 🚫 🔌 🏁 /.
, 🔡 👉 💼 /items.
👥 💪 🚮 📇 tags & ➕ responses 👈 🔜 ✔ 🌐 ➡ 🛠️ 🔌 👉 📻.
& 👥 💪 🚮 📇 dependencies 👈 🔜 🚮 🌐 ➡ 🛠️ 📻 & 🔜 🛠️/❎ 🔠 📨 ⚒ 👫.
Tip
🗒 👈, 🌅 💖 🔗 ➡ 🛠️ 👨🎨, 🙅♂ 💲 🔜 🚶♀️ 👆 ➡ 🛠️ 🔢.
🔚 🏁 👈 🏬 ➡ 🔜:
/items//items/{item_id}
...👥 🎯.
- 👫 🔜 ™ ⏮️ 📇 🔖 👈 🔌 👁 🎻
"items".- 👫 "🔖" ✴️ ⚠ 🏧 🎓 🧾 ⚙️ (⚙️ 🗄).
- 🌐 👫 🔜 🔌 🔁
responses. - 🌐 👫 ➡ 🛠️ 🔜 ✔️ 📇
dependencies🔬/🛠️ ⏭ 👫.- 🚥 👆 📣 🔗 🎯 ➡ 🛠️, 👫 🔜 🛠️ 💁♂️.
- 📻 🔗 🛠️ 🥇, ⤴️
dependencies👨🎨, & ⤴️ 😐 🔢 🔗. - 👆 💪 🚮
Security🔗 ⏮️scopes.
Tip
✔️ dependencies APIRouter 💪 ⚙️, 🖼, 🚚 🤝 🎂 👪 ➡ 🛠️. 🚥 🔗 🚫 🚮 📦 🔠 1️⃣ 👫.
Check
prefix, tags, responses, & dependencies 🔢 (📚 🎏 💼) ⚒ ⚪️➡️ FastAPI ℹ 👆 ❎ 📟 ❎.
🗄 🔗¶
👉 📟 👨❤👨 🕹 app.routers.items, 📁 app/routers/items.py.
& 👥 💪 🤚 🔗 🔢 ⚪️➡️ 🕹 app.dependencies, 📁 app/dependencies.py.
👥 ⚙️ ⚖ 🗄 ⏮️ .. 🔗:
from fastapi import APIRouter, Depends, HTTPException
from ..dependencies import get_token_header
router = APIRouter(
prefix="/items",
tags=["items"],
dependencies=[Depends(get_token_header)],
responses={404: {"description": "Not found"}},
)
fake_items_db = {"plumbus": {"name": "Plumbus"}, "gun": {"name": "Portal Gun"}}
@router.get("/")
async def read_items():
return fake_items_db
@router.get("/{item_id}")
async def read_item(item_id: str):
if item_id not in fake_items_db:
raise HTTPException(status_code=404, detail="Item not found")
return {"name": fake_items_db[item_id]["name"], "item_id": item_id}
@router.put(
"/{item_id}",
tags=["custom"],
responses={403: {"description": "Operation forbidden"}},
)
async def update_item(item_id: str):
if item_id != "plumbus":
raise HTTPException(
status_code=403, detail="You can only update the item: plumbus"
)
return {"item_id": item_id, "name": "The great Plumbus"}
❔ ⚖ 🗄 👷¶
Tip
🚥 👆 💭 👌 ❔ 🗄 👷, 😣 ⏭ 📄 🔛.
👁 ❣ ., 💖:
from .dependencies import get_token_header
🔜 ⛓:
- ▶️ 🎏 📦 👈 👉 🕹 (📁
app/routers/items.py) 🖖 (📁app/routers/)... - 🔎 🕹
dependencies(👽 📁app/routers/dependencies.py)... - & ⚪️➡️ ⚫️, 🗄 🔢
get_token_header.
✋️ 👈 📁 🚫 🔀, 👆 🔗 📁 app/dependencies.py.
💭 ❔ 👆 📱/📁 📊 👀 💖:
2️⃣ ❣ .., 💖:
from ..dependencies import get_token_header
⛓:
- ▶️ 🎏 📦 👈 👉 🕹 (📁
app/routers/items.py) 🖖 (📁app/routers/)... - 🚶 👪 📦 (📁
app/)... - & 📤, 🔎 🕹
dependencies(📁app/dependencies.py)... - & ⚪️➡️ ⚫️, 🗄 🔢
get_token_header.
👈 👷 ☑ ❗ 👶
🎏 🌌, 🚥 👥 ✔️ ⚙️ 3️⃣ ❣ ..., 💖:
from ...dependencies import get_token_header
that 🔜 ⛓:
- ▶️ 🎏 📦 👈 👉 🕹 (📁
app/routers/items.py) 🖖 (📁app/routers/)... - 🚶 👪 📦 (📁
app/)... - ⤴️ 🚶 👪 👈 📦 (📤 🙅♂ 👪 📦,
app🔝 🎚 👶)... - & 📤, 🔎 🕹
dependencies(📁app/dependencies.py)... - & ⚪️➡️ ⚫️, 🗄 🔢
get_token_header.
👈 🔜 🔗 📦 🔛 app/, ⏮️ 🚮 👍 📁 __init__.py, ♒️. ✋️ 👥 🚫 ✔️ 👈. , 👈 🔜 🚮 ❌ 👆 🖼. 👶
✋️ 🔜 👆 💭 ❔ ⚫️ 👷, 👆 💪 ⚙️ ⚖ 🗄 👆 👍 📱 🙅♂ 🤔 ❔ 🏗 👫. 👶
🚮 🛃 tags, responses, & dependencies¶
👥 🚫 ❎ 🔡 /items 🚫 tags=["items"] 🔠 ➡ 🛠️ ↩️ 👥 🚮 👫 APIRouter.
✋️ 👥 💪 🚮 🌅 tags 👈 🔜 ✔ 🎯 ➡ 🛠️, & ➕ responses 🎯 👈 ➡ 🛠️:
from fastapi import APIRouter, Depends, HTTPException
from ..dependencies import get_token_header
router = APIRouter(
prefix="/items",
tags=["items"],
dependencies=[Depends(get_token_header)],
responses={404: {"description": "Not found"}},
)
fake_items_db = {"plumbus": {"name": "Plumbus"}, "gun": {"name": "Portal Gun"}}
@router.get("/")
async def read_items():
return fake_items_db
@router.get("/{item_id}")
async def read_item(item_id: str):
if item_id not in fake_items_db:
raise HTTPException(status_code=404, detail="Item not found")
return {"name": fake_items_db[item_id]["name"], "item_id": item_id}
@router.put(
"/{item_id}",
tags=["custom"],
responses={403: {"description": "Operation forbidden"}},
)
async def update_item(item_id: str):
if item_id != "plumbus":
raise HTTPException(
status_code=403, detail="You can only update the item: plumbus"
)
return {"item_id": item_id, "name": "The great Plumbus"}
Tip
👉 🏁 ➡ 🛠️ 🔜 ✔️ 🌀 🔖: ["items", "custom"].
& ⚫️ 🔜 ✔️ 👯♂️ 📨 🧾, 1️⃣ 404 & 1️⃣ 403.
👑 FastAPI¶
🔜, ➡️ 👀 🕹 app/main.py.
📥 🌐❔ 👆 🗄 & ⚙️ 🎓 FastAPI.
👉 🔜 👑 📁 👆 🈸 👈 👔 🌐 👯♂️.
& 🏆 👆 ⚛ 🔜 🔜 🖖 🚮 👍 🎯 🕹, 👑 📁 🔜 🙅.
🗄 FastAPI¶
👆 🗄 & ✍ FastAPI 🎓 🛎.
& 👥 💪 📣 🌐 🔗 👈 🔜 🌀 ⏮️ 🔗 🔠 APIRouter:
from fastapi import Depends, FastAPI
from .dependencies import get_query_token, get_token_header
from .internal import admin
from .routers import items, users
app = FastAPI(dependencies=[Depends(get_query_token)])
app.include_router(users.router)
app.include_router(items.router)
app.include_router(
admin.router,
prefix="/admin",
tags=["admin"],
dependencies=[Depends(get_token_header)],
responses={418: {"description": "I'm a teapot"}},
)
@app.get("/")
async def root():
return {"message": "Hello Bigger Applications!"}
🗄 APIRouter¶
🔜 👥 🗄 🎏 🔁 👈 ✔️ APIRouterⓂ:
from fastapi import Depends, FastAPI
from .dependencies import get_query_token, get_token_header
from .internal import admin
from .routers import items, users
app = FastAPI(dependencies=[Depends(get_query_token)])
app.include_router(users.router)
app.include_router(items.router)
app.include_router(
admin.router,
prefix="/admin",
tags=["admin"],
dependencies=[Depends(get_token_header)],
responses={418: {"description": "I'm a teapot"}},
)
@app.get("/")
async def root():
return {"message": "Hello Bigger Applications!"}
📁 app/routers/users.py & app/routers/items.py 🔁 👈 🍕 🎏 🐍 📦 app, 👥 💪 ⚙️ 👁 ❣ . 🗄 👫 ⚙️ "⚖ 🗄".
❔ 🏭 👷¶
📄:
from .routers import items, users
⛓:
- ▶️ 🎏 📦 👈 👉 🕹 (📁
app/main.py) 🖖 (📁app/)... - 👀 📦
routers(📁app/routers/)... - & ⚪️➡️ ⚫️, 🗄 🔁
items(📁app/routers/items.py) &users(📁app/routers/users.py)...
🕹 items 🔜 ✔️ 🔢 router (items.router). 👉 🎏 1️⃣ 👥 ✍ 📁 app/routers/items.py, ⚫️ APIRouter 🎚.
& ⤴️ 👥 🎏 🕹 users.
👥 💪 🗄 👫 💖:
from app.routers import items, users
Info
🥇 ⏬ "⚖ 🗄":
from .routers import items, users
🥈 ⏬ "🎆 🗄":
from app.routers import items, users
💡 🌅 🔃 🐍 📦 & 🕹, ✍ 🛂 🐍 🧾 🔃 🕹.
❎ 📛 💥¶
👥 🏭 🔁 items 🔗, ↩️ 🏭 🚮 🔢 router.
👉 ↩️ 👥 ✔️ ➕1️⃣ 🔢 📛 router 🔁 users.
🚥 👥 ✔️ 🗄 1️⃣ ⏮️ 🎏, 💖:
from .routers.items import router
from .routers.users import router
router ⚪️➡️ users 🔜 📁 1️⃣ ⚪️➡️ items & 👥 🚫🔜 💪 ⚙️ 👫 🎏 🕰.
, 💪 ⚙️ 👯♂️ 👫 🎏 📁, 👥 🗄 🔁 🔗:
from fastapi import Depends, FastAPI
from .dependencies import get_query_token, get_token_header
from .internal import admin
from .routers import items, users
app = FastAPI(dependencies=[Depends(get_query_token)])
app.include_router(users.router)
app.include_router(items.router)
app.include_router(
admin.router,
prefix="/admin",
tags=["admin"],
dependencies=[Depends(get_token_header)],
responses={418: {"description": "I'm a teapot"}},
)
@app.get("/")
async def root():
return {"message": "Hello Bigger Applications!"}
🔌 APIRouterⓂ users & items¶
🔜, ➡️ 🔌 routerⓂ ⚪️➡️ 🔁 users & items:
from fastapi import Depends, FastAPI
from .dependencies import get_query_token, get_token_header
from .internal import admin
from .routers import items, users
app = FastAPI(dependencies=[Depends(get_query_token)])
app.include_router(users.router)
app.include_router(items.router)
app.include_router(
admin.router,
prefix="/admin",
tags=["admin"],
dependencies=[Depends(get_token_header)],
responses={418: {"description": "I'm a teapot"}},
)
@app.get("/")
async def root():
return {"message": "Hello Bigger Applications!"}
Info
users.router 🔌 APIRouter 🔘 📁 app/routers/users.py.
& items.router 🔌 APIRouter 🔘 📁 app/routers/items.py.
⏮️ app.include_router() 👥 💪 🚮 🔠 APIRouter 👑 FastAPI 🈸.
⚫️ 🔜 🔌 🌐 🛣 ⚪️➡️ 👈 📻 🍕 ⚫️.
📡 ℹ
⚫️ 🔜 🤙 🔘 ✍ ➡ 🛠️ 🔠 ➡ 🛠️ 👈 📣 APIRouter.
, ⛅ 🎑, ⚫️ 🔜 🤙 👷 🚥 🌐 🎏 👁 📱.
Check
👆 🚫 ✔️ 😟 🔃 🎭 🕐❔ ✅ 📻.
👉 🔜 ✊ ⏲ & 🔜 🕴 🔨 🕴.
⚫️ 🏆 🚫 📉 🎭. 👶
🔌 APIRouter ⏮️ 🛃 prefix, tags, responses, & dependencies¶
🔜, ➡️ 🌈 👆 🏢 🤝 👆 app/internal/admin.py 📁.
⚫️ 🔌 APIRouter ⏮️ 📡 ➡ 🛠️ 👈 👆 🏢 💰 🖖 📚 🏗.
👉 🖼 ⚫️ 🔜 💎 🙅. ✋️ ➡️ 💬 👈 ↩️ ⚫️ 💰 ⏮️ 🎏 🏗 🏢, 👥 🚫🔜 🔀 ⚫️ & 🚮 prefix, dependencies, tags, ♒️. 🔗 APIRouter:
from fastapi import APIRouter
router = APIRouter()
@router.post("/")
async def update_admin():
return {"message": "Admin getting schwifty"}
✋️ 👥 💚 ⚒ 🛃 prefix 🕐❔ ✅ APIRouter 👈 🌐 🚮 ➡ 🛠️ ▶️ ⏮️ /admin, 👥 💚 🔐 ⚫️ ⏮️ dependencies 👥 ⏪ ✔️ 👉 🏗, & 👥 💚 🔌 tags & responses.
👥 💪 📣 🌐 👈 🍵 ✔️ 🔀 ⏮️ APIRouter 🚶♀️ 👈 🔢 app.include_router():
from fastapi import Depends, FastAPI
from .dependencies import get_query_token, get_token_header
from .internal import admin
from .routers import items, users
app = FastAPI(dependencies=[Depends(get_query_token)])
app.include_router(users.router)
app.include_router(items.router)
app.include_router(
admin.router,
prefix="/admin",
tags=["admin"],
dependencies=[Depends(get_token_header)],
responses={418: {"description": "I'm a teapot"}},
)
@app.get("/")
async def root():
return {"message": "Hello Bigger Applications!"}
👈 🌌, ⏮️ APIRouter 🔜 🚧 ⚗, 👥 💪 💰 👈 🎏 app/internal/admin.py 📁 ⏮️ 🎏 🏗 🏢.
🏁 👈 👆 📱, 🔠 ➡ 🛠️ ⚪️➡️ admin 🕹 🔜 ✔️:
- 🔡
/admin. - 🔖
admin. - 🔗
get_token_header. - 📨
418. 👶
✋️ 👈 🔜 🕴 📉 👈 APIRouter 👆 📱, 🚫 🙆 🎏 📟 👈 ⚙️ ⚫️.
, 🖼, 🎏 🏗 💪 ⚙️ 🎏 APIRouter ⏮️ 🎏 🤝 👩🔬.
🔌 ➡ 🛠️¶
👥 💪 🚮 ➡ 🛠️ 🔗 FastAPI 📱.
📥 👥 ⚫️... 🎦 👈 👥 💪 🤷:
from fastapi import Depends, FastAPI
from .dependencies import get_query_token, get_token_header
from .internal import admin
from .routers import items, users
app = FastAPI(dependencies=[Depends(get_query_token)])
app.include_router(users.router)
app.include_router(items.router)
app.include_router(
admin.router,
prefix="/admin",
tags=["admin"],
dependencies=[Depends(get_token_header)],
responses={418: {"description": "I'm a teapot"}},
)
@app.get("/")
async def root():
return {"message": "Hello Bigger Applications!"}
& ⚫️ 🔜 👷 ☑, 👯♂️ ⏮️ 🌐 🎏 ➡ 🛠️ 🚮 ⏮️ app.include_router().
📶 📡 ℹ
🗒: 👉 📶 📡 ℹ 👈 👆 🎲 💪 🚶.
APIRouterⓂ 🚫 "🗻", 👫 🚫 👽 ⚪️➡️ 🎂 🈸.
👉 ↩️ 👥 💚 🔌 👫 ➡ 🛠️ 🗄 🔗 & 👩💻 🔢.
👥 🚫🔜 ❎ 👫 & "🗻" 👫 ➡ 🎂, ➡ 🛠️ "🖖" (🏤-✍), 🚫 🔌 🔗.
✅ 🏧 🛠️ 🩺¶
🔜, 🏃 uvicorn, ⚙️ 🕹 app.main & 🔢 app:
$ uvicorn app.main:app --reload
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
& 📂 🩺 http://127.0.0.1:8000/docs.
👆 🔜 👀 🏧 🛠️ 🩺, ✅ ➡ ⚪️➡️ 🌐 🔁, ⚙️ ☑ ➡ (& 🔡) & ☑ 🔖:

🔌 🎏 📻 💗 🕰 ⏮️ 🎏 prefix¶
👆 💪 ⚙️ .include_router() 💗 🕰 ⏮️ 🎏 📻 ⚙️ 🎏 🔡.
👉 💪 ⚠, 🖼, 🎦 🎏 🛠️ 🔽 🎏 🔡, ✅ /api/v1 & /api/latest.
👉 🏧 ⚙️ 👈 👆 5️⃣📆 🚫 🤙 💪, ✋️ ⚫️ 📤 💼 👆.
🔌 APIRouter ➕1️⃣¶
🎏 🌌 👆 💪 🔌 APIRouter FastAPI 🈸, 👆 💪 🔌 APIRouter ➕1️⃣ APIRouter ⚙️:
router.include_router(other_router)
⚒ 💭 👆 ⚫️ ⏭ 🔌 router FastAPI 📱, 👈 ➡ 🛠️ ⚪️➡️ other_router 🔌.