Bird
Raised Fist0
FastAPIframework~5 mins

Router prefix and tags in FastAPI

Choose your learning style10 modes available
Introduction

Router prefix helps group related routes under a common path. Tags organize routes in the API docs for easy reading.

When you want to group user-related routes under '/users' path.
When you want to separate admin routes from public routes.
When you want to add descriptive tags to routes for better API documentation.
When building a large API with many endpoints to keep it organized.
When you want to reuse a router with a different prefix in multiple places.
Syntax
FastAPI
from fastapi import APIRouter

router = APIRouter(prefix="/prefix_path", tags=["tag1", "tag2"])

@router.get("/endpoint")
async def example():
    return {"message": "Hello"}

The prefix adds a common path before all routes in this router.

The tags list adds labels to routes for API docs grouping.

Examples
This groups user routes under '/users' and tags them as 'Users' in docs.
FastAPI
router = APIRouter(prefix="/users", tags=["Users"])

@router.get("/")
async def get_users():
    return ["Alice", "Bob"]
This router has two tags and a prefix for item-related routes.
FastAPI
router = APIRouter(prefix="/items", tags=["Items", "Inventory"])

@router.get("/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}
You can also add tags directly on route decorators without prefix.
FastAPI
router = APIRouter()

@router.get("/status", tags=["Health"])
async def status():
    return {"status": "ok"}
Sample Program

This FastAPI app has two routers. One for users with prefix '/users' and tag 'Users'. Another for items with prefix '/items' and tag 'Items'. This organizes routes and API docs clearly.

FastAPI
from fastapi import FastAPI, APIRouter

app = FastAPI()

user_router = APIRouter(prefix="/users", tags=["Users"])

@user_router.get("/")
async def list_users():
    return ["Alice", "Bob"]

item_router = APIRouter(prefix="/items", tags=["Items"])

@item_router.get("/{item_id}")
async def get_item(item_id: int):
    return {"item_id": item_id, "name": "Sample Item"}

app.include_router(user_router)
app.include_router(item_router)
OutputSuccess
Important Notes

Router prefixes help avoid repeating common path parts in every route.

Tags improve the auto-generated API docs readability by grouping endpoints.

You can add tags either on the router or on individual routes.

Summary

Router prefix groups routes under a shared path.

Tags label routes for better API documentation.

Using both keeps your API organized and easy to understand.

Practice

(1/5)
1. What is the main purpose of using a prefix in a FastAPI router?
easy
A. To add authentication to routes automatically
B. To group routes under a common URL path segment
C. To change the HTTP method of all routes
D. To disable routes temporarily

Solution

  1. Step 1: Understand what prefix does in FastAPI routers

    The prefix adds a common path segment to all routes defined in that router, grouping them logically.
  2. Step 2: Compare options with prefix purpose

    Only To group routes under a common URL path segment correctly describes grouping routes under a shared URL path segment.
  3. Final Answer:

    To group routes under a common URL path segment -> Option B
  4. Quick Check:

    Router prefix = group routes [OK]
Hint: Prefix groups routes by URL path segment [OK]
Common Mistakes:
  • Thinking prefix changes HTTP methods
  • Confusing prefix with authentication
  • Assuming prefix disables routes
2. Which of the following is the correct way to add a prefix and tags to a FastAPI router?
easy
A. router = APIRouter(prefix='/items', tags=['items'])
B. router = APIRouter(tags='/items', prefix=['items'])
C. router = APIRouter(prefix=['items'], tags='/items')
D. router = APIRouter(prefix='/items', tags='/items')

Solution

  1. Step 1: Recall correct parameter types for prefix and tags

    Prefix expects a string starting with '/', tags expects a list of strings.
  2. Step 2: Check each option's syntax

    router = APIRouter(prefix='/items', tags=['items']) uses prefix as string and tags as list correctly; others mix types incorrectly.
  3. Final Answer:

    router = APIRouter(prefix='/items', tags=['items']) -> Option A
  4. Quick Check:

    Prefix string + tags list = correct syntax [OK]
Hint: Prefix is string, tags is list of strings [OK]
Common Mistakes:
  • Using list for prefix instead of string
  • Using string for tags instead of list
  • Mixing order of parameters incorrectly
3. Given this code snippet, what is the full path of the endpoint?
from fastapi import APIRouter

router = APIRouter(prefix='/users', tags=['users'])

@router.get('/profile')
async def get_profile():
    return {'msg': 'User profile'}
medium
A. /profile/users
B. /profile
C. /users
D. /users/profile

Solution

  1. Step 1: Identify router prefix and route path

    The router has prefix '/users' and the route path is '/profile'.
  2. Step 2: Combine prefix and route path

    Full path is prefix + route path = '/users' + '/profile' = '/users/profile'.
  3. Final Answer:

    /users/profile -> Option D
  4. Quick Check:

    Prefix + route path = full endpoint path [OK]
Hint: Full path = prefix + route path [OK]
Common Mistakes:
  • Ignoring prefix and using only route path
  • Swapping prefix and route path order
  • Confusing tags with path
4. What is wrong with this FastAPI router code?
router = APIRouter(prefix=['/items'], tags='items')
medium
A. prefix should be a list, tags should be a string
B. Both prefix and tags should be strings
C. prefix should be a string, tags should be a list of strings
D. No error, this is valid syntax

Solution

  1. Step 1: Check expected types for prefix and tags

    Prefix must be a string starting with '/', tags must be a list of strings.
  2. Step 2: Analyze given code

    Prefix is given as a list, tags as a string, both reversed from expected types.
  3. Final Answer:

    prefix should be a string, tags should be a list of strings -> Option C
  4. Quick Check:

    Prefix = string, tags = list [OK]
Hint: Prefix string, tags list; reverse causes error [OK]
Common Mistakes:
  • Using list for prefix
  • Using string for tags
  • Assuming both can be strings
5. You want to create two routers in FastAPI: one for /products tagged 'products' and another for /orders tagged 'orders'. How do you correctly set prefixes and tags to keep your API organized?
hard
A. router_products = APIRouter(prefix='/products', tags=['products'])\nrouter_orders = APIRouter(prefix='/orders', tags=['orders'])
B. router_products = APIRouter(prefix=['products'], tags='products')\nrouter_orders = APIRouter(prefix=['orders'], tags='orders')
C. router_products = APIRouter(prefix='/products', tags='products')\nrouter_orders = APIRouter(prefix='/orders', tags='orders')
D. router_products = APIRouter(tags=['products'])\nrouter_orders = APIRouter(prefix='/orders')

Solution

  1. Step 1: Recall correct types for prefix and tags

    Prefix must be a string starting with '/', tags must be a list of strings.
  2. Step 2: Evaluate each option for correctness and organization

    router_products = APIRouter(prefix='/products', tags=['products'])\nrouter_orders = APIRouter(prefix='/orders', tags=['orders']) correctly assigns string prefixes and list tags for both routers, organizing API paths and documentation clearly.
  3. Final Answer:

    router_products = APIRouter(prefix='/products', tags=['products']) router_orders = APIRouter(prefix='/orders', tags=['orders']) -> Option A
  4. Quick Check:

    Correct prefix and tags keep API organized [OK]
Hint: Use string prefix and list tags for each router [OK]
Common Mistakes:
  • Using list for prefix or string for tags
  • Omitting prefix or tags on one router
  • Mixing tags and prefix types
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard