📖 Scenario: You are building a simple web API using FastAPI. Your API will have an endpoint that returns a greeting message. You want to add a boolean query parameter to control whether the greeting is formal or casual.
🎯 Goal: Create a FastAPI app with a GET endpoint /greet that accepts a boolean query parameter called formal. If formal is true, the endpoint returns a formal greeting. If formal is false or missing, it returns a casual greeting.
📋 What You'll Learn
Create a FastAPI app instance named app
Add a GET endpoint /greet with a boolean query parameter formal
Use formal: bool = False to set the default value
Return {"message": "Good evening, sir."} if formal is true
Return {"message": "Hey there!"} if formal is false
💡 Why This Matters
🌍 Real World
Boolean query parameters are common in APIs to toggle features or options, such as filtering results or changing response styles.
💼 Career
Understanding how to handle boolean query parameters in FastAPI is essential for backend developers building flexible and user-friendly APIs.
Progress0 / 4 steps
1
Create FastAPI app instance
Import FastAPI from fastapi and create an app instance called app.
FastAPI
Hint
Use app = FastAPI() to create the app instance.
2
Add GET endpoint with boolean query parameter
Add a GET endpoint /greet to app. Define a function greet that takes a boolean query parameter formal with default value False.
FastAPI
Hint
Use @app.get("/greet") decorator and define formal: bool = False in the function parameters.
3
Implement conditional greeting logic
Inside the greet function, return {"message": "Good evening, sir."} if formal is True. Otherwise, return {"message": "Hey there!"}.
FastAPI
Hint
Use an if statement to check formal and return the correct message.
4
Add type hints and docstring for clarity
Add a docstring to the greet function explaining that formal controls the greeting style. Ensure the function has a return type hint of dict.
FastAPI
Hint
Add a docstring inside the function and a return type hint -> dict.
Practice
(1/5)
1. What does a Boolean query parameter in FastAPI represent?
easy
A. A true or false flag passed in the URL to control API behavior
B. A number used to count API requests
C. A string that describes the API endpoint
D. A list of items sent in the request body
Solution
Step 1: Identify the purpose of Boolean query parameters
Boolean query parameters are flags that can be true or false, used to control how the API behaves.
Step 2: Identify the correct description
Only "A true or false flag passed in the URL to control API behavior" describes a true/false flag passed via URL query parameters.
Final Answer:
A true or false flag passed in the URL to control API behavior -> Option A
Quick Check:
Boolean query parameter = true/false flag [OK]
Hint: Boolean query parameters are true/false flags in the URL [OK]
Common Mistakes:
Confusing Boolean parameters with numbers or strings
Thinking Boolean parameters come from request body
Assuming Boolean parameters are lists
2. Which of the following is the correct way to declare an optional Boolean query parameter in FastAPI?
easy
A. def read_items(active: bool = Query(None)):
B. def read_items(active: Optional[bool] = Query(None)):
C. def read_items(active: str = Query(None)):
D. def read_items(active: int = Query(None)):
Solution
Step 1: Recall FastAPI syntax for optional Boolean query parameters
Use Optional[bool] with Query(None) to allow the parameter to be true, false, or missing.
Step 2: Match the correct function signature
def read_items(active: Optional[bool] = Query(None)): correctly uses Optional[bool] and Query(None) for an optional Boolean query parameter.
Final Answer:
def read_items(active: Optional[bool] = Query(None)): -> Option B
Quick Check:
Optional[bool] with Query(None) = correct syntax [OK]
Hint: Use Optional[bool] with Query(None) for optional Booleans [OK]
Common Mistakes:
Using bool without Optional for optional parameters
Using str or int instead of bool
Omitting Query import or default value
3. Given this FastAPI endpoint code, what will be the output if the URL is /items?active=true?
A. The return statement must convert active to string
B. Boolean query parameters cannot be used in FastAPI
C. Query() requires a default value for optional parameters
D. The function must be synchronous, not async
Solution
Step 1: Check Query parameter usage
Query() without a default value means the parameter is required. For optional, a default like None is needed.
Step 2: Identify the missing default
Since active is bool and no default is given, FastAPI expects the query parameter always present, else error.
Final Answer:
Query() requires a default value for optional parameters -> Option C
Quick Check:
Query() needs default for optional params [OK]
Hint: Use Query(None) for optional Boolean parameters [OK]
Common Mistakes:
Omitting default value for optional query parameters
Thinking async is not allowed
Trying to convert Boolean to string manually
5. You want to create a FastAPI endpoint that filters items by an optional Boolean query parameter available. If available is true, return only available items; if false, only unavailable items; if missing, return all items. Which code correctly implements this behavior?
hard
A. from fastapi import FastAPI, Query
from typing import Optional
app = FastAPI()
items = [{"name": "item1", "available": True}, {"name": "item2", "available": False}]
@app.get('/items')
async def read_items(available: Optional[bool] = Query(None)):
if available is None:
return items
return [item for item in items if item["available"] == available]
B. from fastapi import FastAPI
app = FastAPI()
@app.get('/items')
async def read_items(available: bool = False):
return {"available": available}
C. from fastapi import FastAPI, Query
app = FastAPI()
@app.get('/items')
async def read_items(available: bool = Query()):
return {"available": available}
D. from fastapi import FastAPI, Query
from typing import Optional
app = FastAPI()
@app.get('/items')
async def read_items(available: Optional[str] = Query(None)):
return {"available": available}
Solution
Step 1: Analyze the required filtering behavior
If available is None, return all items; else filter by matching available status.
Step 2: Check code correctness
from fastapi import FastAPI, Query
from typing import Optional
app = FastAPI()
items = [{"name": "item1", "available": True}, {"name": "item2", "available": False}]
@app.get('/items')
async def read_items(available: Optional[bool] = Query(None)):
if available is None:
return items
return [item for item in items if item["available"] == available] uses Optional[bool] with Query(None) and filters items correctly based on available value.
Final Answer:
from fastapi import FastAPI, Query
from typing import Optional
app = FastAPI()
items = [{"name": "item1", "available": True}, {"name": "item2", "available": False}]
@app.get('/items')
async def read_items(available: Optional[bool] = Query(None)):
if available is None:
return items
return [item for item in items if item["available"] == available] -> Option A
Quick Check:
Optional[bool] with filtering logic = correct [OK]
Hint: Use Optional[bool] and check None to handle missing query param [OK]
Common Mistakes:
Using bool without Optional for optional parameter
Not filtering items based on Boolean value
Using string type instead of Boolean
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.