Skip to content

🦏 🈸 - 💗 📁

🚥 👆 🏗 🈸 ⚖️ 🕸 🛠️, ⚫️ 🛎 💼 👈 👆 💪 🚮 🌐 🔛 👁 📁.

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:

app/routers/users.py
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 🎓:

app/routers/users.py
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 🎚:

app/dependencies.py
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")

Tip

👥 ⚙️ 💭 🎚 📉 👉 🖼.

✋️ 🎰 💼 👆 🔜 🤚 👍 🏁 ⚙️ 🛠️ 💂‍♂ 🚙.

➕1️⃣ 🕹 ⏮️ APIRouter

➡️ 💬 👆 ✔️ 🔗 💡 🚚 "🏬" ⚪️➡️ 👆 🈸 🕹 app/routers/items.py.

👆 ✔️ ➡ 🛠️ :

  • /items/
  • /items/{item_id}

⚫️ 🌐 🎏 📊 ⏮️ app/routers/users.py.

✋️ 👥 💚 🙃 & 📉 📟 🍖.

👥 💭 🌐 ➡ 🛠️ 👉 🕹 ✔️ 🎏:

  • prefix: /items.
  • tags: (1️⃣ 🔖: items).
  • responses.
  • dependencies: 👫 🌐 💪 👈 X-Token 🔗 👥 ✍.

, ↩️ ❎ 🌐 👈 🔠 ➡ 🛠️, 👥 💪 🚮 ⚫️ APIRouter.

app/routers/items.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"}

➡ 🔠 ➡ 🛠️ ✔️ ▶️ ⏮️ /, 💖:

@router.get("/{item_id}")
async def read_item(item_id: str):
    ...

...🔡 🔜 🚫 🔌 🏁 /.

, 🔡 👉 💼 /items.

👥 💪 🚮 📇 tags & ➕ responses 👈 🔜 ✔ 🌐 ➡ 🛠️ 🔌 👉 📻.

& 👥 💪 🚮 📇 dependencies 👈 🔜 🚮 🌐 ➡ 🛠️ 📻 & 🔜 🛠️/❎ 🔠 📨 ⚒ 👫.

Tip

🗒 👈, 🌅 💖 🔗 ➡ 🛠️ 👨‍🎨, 🙅‍♂ 💲 🔜 🚶‍♀️ 👆 ➡ 🛠️ 🔢.

🔚 🏁 👈 🏬 ➡ 🔜:

  • /items/
  • /items/{item_id}

...👥 🎯.

  • 👫 🔜 ™ ⏮️ 📇 🔖 👈 🔌 👁 🎻 "items".
    • 👫 "🔖" ✴️ ⚠ 🏧 🎓 🧾 ⚙️ (⚙️ 🗄).
  • 🌐 👫 🔜 🔌 🔁 responses.
  • 🌐 👫 ➡ 🛠️ 🔜 ✔️ 📇 dependencies 🔬/🛠️ ⏭ 👫.

Tip

✔️ dependencies APIRouter 💪 ⚙️, 🖼, 🚚 🤝 🎂 👪 ➡ 🛠️. 🚥 🔗 🚫 🚮 📦 🔠 1️⃣ 👫.

Check

prefix, tags, responses, & dependencies 🔢 (📚 🎏 💼) ⚒ ⚪️➡️ FastAPI ℹ 👆 ❎ 📟 ❎.

🗄 🔗

👉 📟 👨‍❤‍👨 🕹 app.routers.items, 📁 app/routers/items.py.

& 👥 💪 🤚 🔗 🔢 ⚪️➡️ 🕹 app.dependencies, 📁 app/dependencies.py.

👥 ⚙️ ⚖ 🗄 ⏮️ .. 🔗:

app/routers/items.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 🎯 👈 ➡ 🛠️:

app/routers/items.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

👉 🏁 ➡ 🛠️ 🔜 ✔️ 🌀 🔖: ["items", "custom"].

& ⚫️ 🔜 ✔️ 👯‍♂️ 📨 🧾, 1️⃣ 404 & 1️⃣ 403.

👑 FastAPI

🔜, ➡️ 👀 🕹 app/main.py.

📥 🌐❔ 👆 🗄 & ⚙️ 🎓 FastAPI.

👉 🔜 👑 📁 👆 🈸 👈 👔 🌐 👯‍♂️.

& 🏆 👆 ⚛ 🔜 🔜 🖖 🚮 👍 🎯 🕹, 👑 📁 🔜 🙅.

🗄 FastAPI

👆 🗄 & ✍ FastAPI 🎓 🛎.

& 👥 💪 📣 🌐 🔗 👈 🔜 🌀 ⏮️ 🔗 🔠 APIRouter:

app/main.py
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Ⓜ:

app/main.py
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 & 👥 🚫🔜 💪 ⚙️ 👫 🎏 🕰.

, 💪 ⚙️ 👯‍♂️ 👫 🎏 📁, 👥 🗄 🔁 🔗:

app/main.py
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!"}

🔌 APIRouterusers & items

🔜, ➡️ 🔌 routerⓂ ⚪️➡️ 🔁 users & items:

app/main.py
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:

app/internal/admin.py
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():

app/main.py
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 📱.

📥 👥 ⚫️... 🎦 👈 👥 💪 🤷:

app/main.py
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 🔌.