Bird
Raised Fist0
FastAPIframework~20 mins

Dependencies with parameters in FastAPI - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
FastAPI Dependency Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this FastAPI dependency with parameter?

Consider this FastAPI dependency that takes a parameter and returns a greeting message. What will be the response when accessing /hello?name=Alice?

FastAPI
from fastapi import FastAPI, Depends

app = FastAPI()

def greet(name: str):
    return f"Hello, {name}!"

@app.get("/hello")
async def hello(message: str = Depends(greet)):
    return {"message": message}
A{"message": "Hello, Alice!"}
B{"message": "Hello, name!"}
C{"message": "Hello!"}
D{"message": "Hello, None!"}
Attempts:
2 left
💡 Hint

Think about how the Depends function injects the parameter from the query string.

📝 Syntax
intermediate
2:00remaining
Which option correctly defines a FastAPI dependency with a default parameter value?

Choose the correct way to define a dependency function that takes an optional parameter lang with default value "en".

A
def get_language(lang: str):
    if not lang:
        lang = "en"
    return lang
B
def get_language(lang: str = "en"):
    return lang
C
def get_language(lang: str = Query("en")):
    return lang
D
def get_language(lang: str = Depends("en")):
    return lang
Attempts:
2 left
💡 Hint

Remember to use FastAPI's Query for default query parameters in dependencies.

🔧 Debug
advanced
2:00remaining
Why does this FastAPI dependency with parameter cause a runtime error?

Examine the code below. Why does calling /items cause a runtime error?

FastAPI
from fastapi import FastAPI, Depends

app = FastAPI()

def get_multiplier(factor: int):
    return lambda x: x * factor

@app.get("/items")
async def read_items(multiplier = Depends(get_multiplier)):
    return {"result": multiplier(5)}
ARuntimeError because get_multiplier requires a parameter but FastAPI cannot provide it automatically
BTypeError because multiplier is not callable
CKeyError because 'factor' is missing in request
DNo error, returns {"result": 25}
Attempts:
2 left
💡 Hint

Think about how FastAPI injects parameters into dependencies.

🧠 Conceptual
advanced
2:00remaining
How does FastAPI handle dependencies with parameters that have default values?

Which statement best describes how FastAPI resolves dependencies with parameters that have default values?

AFastAPI raises an error if the parameter has a default value
BFastAPI always requires the parameter to be provided in the request, ignoring defaults
CFastAPI ignores default values and sets parameters to None
DFastAPI uses the default value if the parameter is not provided in the request
Attempts:
2 left
💡 Hint

Think about how query parameters with defaults behave in FastAPI.

state_output
expert
2:00remaining
What is the output of this FastAPI dependency chain with parameters?

Given the following code, what is the JSON response when accessing /compute?value=3?

FastAPI
from fastapi import FastAPI, Depends, Query

app = FastAPI()

def double(value: int = Query(...)):
    return value * 2

def add_five(number: int = Depends(double)):
    return number + 5

@app.get("/compute")
async def compute(result: int = Depends(add_five)):
    return {"result": result}
A{"result": 8}
B{"result": 11}
C{"result": 16}
D{"result": 10}
Attempts:
2 left
💡 Hint

Trace the dependency calls and their returned values step-by-step.

Practice

(1/5)
1. What is the main purpose of using dependencies with parameters in FastAPI?
easy
A. To automatically generate HTML templates
B. To create global variables accessible everywhere
C. To replace route functions with classes
D. To customize shared code by passing arguments to dependencies

Solution

  1. Step 1: Understand dependency role

    Dependencies in FastAPI are reusable pieces of code that can be shared across routes.
  2. Step 2: Recognize parameter use

    Adding parameters to dependencies allows customizing their behavior for different routes or situations.
  3. Final Answer:

    To customize shared code by passing arguments to dependencies -> Option D
  4. Quick Check:

    Dependencies with parameters = customize shared code [OK]
Hint: Dependencies with parameters customize shared logic easily [OK]
Common Mistakes:
  • Thinking dependencies create global variables
  • Confusing dependencies with route handlers
  • Assuming dependencies generate HTML
2. Which of the following is the correct way to pass a parameter to a dependency in FastAPI?
easy
A. Depends(get_user(user_id=5))
B. Depends(get_user, user_id=5)
C. Depends(get_user)(user_id=5)
D. Depends(get_user)[user_id=5]

Solution

  1. Step 1: Recall Depends usage

    Depends expects a callable or a call to a callable that returns a dependency.
  2. Step 2: Passing parameters

    To pass parameters, you call the dependency function inside Depends, like Depends(get_user(user_id=5)).
  3. Final Answer:

    Depends(get_user(user_id=5)) -> Option A
  4. Quick Check:

    Call dependency inside Depends to pass parameters [OK]
Hint: Call dependency inside Depends() to pass parameters [OK]
Common Mistakes:
  • Passing parameters directly to Depends without calling
  • Using brackets [] instead of parentheses ()
  • Trying to call Depends as a function with parameters
3. Given this code snippet, what will be the output when accessing the endpoint?
from fastapi import FastAPI, Depends

app = FastAPI()

def get_multiplier(factor: int):
    def multiplier(value: int):
        return value * factor
    return multiplier

@app.get("/multiply")
async def multiply(value: int, multiply_func = Depends(get_multiplier(3))):
    return {"result": multiply_func(value)}
medium
A. Error because Depends cannot take parameters
B. {"result": 6} when value=3
C. {"result": 9} when value=3
D. {"result": 3} when value=3

Solution

  1. Step 1: Understand get_multiplier

    get_multiplier(3) returns a function that multiplies input by 3.
  2. Step 2: Analyze endpoint call

    When calling /multiply with value=3, multiply_func(3) returns 3 * 3 = 9.
  3. Final Answer:

    {"result": 9} when value=3 -> Option C
  4. Quick Check:

    Dependency returns multiplier with factor 3, output 9 [OK]
Hint: Multiply value by factor passed in dependency [OK]
Common Mistakes:
  • Assuming Depends cannot take parameters
  • Confusing returned function with direct value
  • Mixing up multiplication factor
4. Identify the error in this FastAPI dependency usage:
def get_limit(limit: int = 10):
    return limit

@app.get("/items")
async def read_items(limit = Depends(get_limit(limit=20))):
    return {"limit": limit}
medium
A. Default value in get_limit conflicts with parameter passed
B. Cannot pass parameters directly inside Depends like get_limit(limit=20)
C. Missing type annotation for limit in read_items
D. Depends should be imported from fastapi.dependencies

Solution

  1. Step 1: Check Depends usage

    Depends expects a callable or a call to a callable without parameters directly inside Depends.
  2. Step 2: Correct way to pass parameters

    To pass parameters, wrap get_limit in another function or use a lambda to supply parameters.
  3. Final Answer:

    Cannot pass parameters directly inside Depends like get_limit(limit=20) -> Option B
  4. Quick Check:

    Depends() must wrap callable, not call with parameters directly [OK]
Hint: Wrap parameterized dependency call outside Depends() [OK]
Common Mistakes:
  • Calling dependency with parameters inside Depends directly
  • Ignoring need for wrapper function
  • Wrong import path for Depends
5. How can you create a reusable dependency with a parameter that changes per route in FastAPI? Choose the best approach.
def common_dep(param: str):
    def dependency():
        return f"Value is {param}"
    return dependency

@app.get("/route1")
async def route1(dep = Depends(common_dep("A"))):
    return {"msg": dep}

@app.get("/route2")
async def route2(dep = Depends(common_dep("B"))):
    return {"msg": dep}
hard
A. Define a function returning a dependency function with parameter, then call it inside Depends
B. Use global variables to store param values for each route
C. Pass parameters directly to Depends without wrapping
D. Create separate dependency functions for each parameter value

Solution

  1. Step 1: Understand reusable dependency pattern

    Define a function that returns a dependency function customized by parameters.
  2. Step 2: Apply pattern per route

    Call this function with different parameters inside Depends for each route to customize behavior.
  3. Final Answer:

    Define a function returning a dependency function with parameter, then call it inside Depends -> Option A
  4. Quick Check:

    Wrap dependency with parameter function, call inside Depends [OK]
Hint: Wrap parameterized dependency in function, call inside Depends [OK]
Common Mistakes:
  • Using global variables instead of parameters
  • Passing parameters directly to Depends without wrapping
  • Duplicating dependency functions unnecessarily