Bird
Raised Fist0
FastAPIframework~10 mins

Why API security is critical in FastAPI - Test Your Understanding

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import FastAPI and create an app instance.

FastAPI
from fastapi import [1]

app = [1]()
Drag options to blanks, or click blank then click option'
ADepends
BRequest
CResponse
DFastAPI
Attempts:
3 left
💡 Hint
Common Mistakes
Importing Request or Response instead of FastAPI.
Not creating the app instance with FastAPI().
2fill in blank
medium

Complete the code to define a GET endpoint that returns a welcome message.

FastAPI
@app.[1]("/")
async def root():
    return {"message": "Welcome to the API"}
Drag options to blanks, or click blank then click option'
Apost
Bput
Cget
Ddelete
Attempts:
3 left
💡 Hint
Common Mistakes
Using POST or PUT instead of GET for a simple data retrieval.
Forgetting the @app decorator.
3fill in blank
hard

Fix the error in the code to add a security dependency for API key verification.

FastAPI
from fastapi.security import APIKeyHeader
from fastapi import Depends

api_key_header = APIKeyHeader(name="X-API-Key")

@app.get("/secure")
async def secure_endpoint(api_key: str = [1]):
    if api_key != "secret-key":
        return {"error": "Unauthorized"}
    return {"message": "Secure data"}
Drag options to blanks, or click blank then click option'
ADepends(api_key_header)
Bapi_key_header
CDepends()
Dapi_key
Attempts:
3 left
💡 Hint
Common Mistakes
Passing the APIKeyHeader instance directly without Depends.
Using Depends() without arguments.
4fill in blank
hard

Fill both blanks to create a middleware that logs each request's method and URL.

FastAPI
from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware

class LoggingMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request: [1], call_next):
        print(f"Request: {request.method} {request.[2]")
        response = await call_next(request)
        return response

app.add_middleware(LoggingMiddleware)
Drag options to blanks, or click blank then click option'
ARequest
BResponse
Curl
Dpath
Attempts:
3 left
💡 Hint
Common Mistakes
Using Response instead of Request in dispatch.
Accessing request.url instead of request.path for the path string.
5fill in blank
hard

Fill all three blanks to create a dictionary comprehension that filters headers starting with 'X-' and converts keys to lowercase.

FastAPI
filtered_headers = { [1].lower(): [2] for [1], [3] in request.headers.items() if [1].startswith("X-") }
Drag options to blanks, or click blank then click option'
Akey
Bvalue
Dheader
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up key and value variable names.
Not converting keys to lowercase.

Practice

(1/5)
1. Why is API security critical when building applications with FastAPI?
easy
A. It reduces the size of the API responses.
B. It makes the API run faster.
C. It automatically fixes bugs in the code.
D. It prevents unauthorized users from accessing sensitive data.

Solution

  1. Step 1: Understand the purpose of API security

    API security is designed to stop unauthorized users from accessing or changing data they shouldn't see.
  2. Step 2: Relate to FastAPI's use case

    FastAPI uses security measures like token checks to protect data and user privacy.
  3. Final Answer:

    It prevents unauthorized users from accessing sensitive data. -> Option D
  4. Quick Check:

    API security = prevent unauthorized access [OK]
Hint: Think: security means stopping unwanted access [OK]
Common Mistakes:
  • Confusing security with performance improvements
  • Believing security fixes bugs automatically
  • Thinking security reduces data size
2. Which FastAPI code snippet correctly adds a security dependency to check an API token?
easy
A. from fastapi import Depends, Security from fastapi.security import APIKeyHeader api_key_header = APIKeyHeader(name="Authorization") @app.get("/secure") async def secure_route(api_key: str = Security(api_key_header)): return {"key": api_key}
B. from fastapi import Depends @app.get("/secure") async def secure_route(token: str = Depends("Authorization")): return {"token": token}
C. from fastapi import Security @app.get("/secure") async def secure_route(api_key: str = Security("Authorization")): return {"key": api_key}
D. from fastapi import Depends @app.get("/secure") async def secure_route(api_key: str): return {"key": api_key}

Solution

  1. Step 1: Identify correct use of Security dependency

    FastAPI uses Security with APIKeyHeader to check headers like Authorization tokens.
  2. Step 2: Check code correctness

    from fastapi import Depends, Security from fastapi.security import APIKeyHeader api_key_header = APIKeyHeader(name="Authorization") @app.get("/secure") async def secure_route(api_key: str = Security(api_key_header)): return {"key": api_key} correctly imports APIKeyHeader, creates a header dependency, and uses Security to enforce it.
  3. Final Answer:

    Code using APIKeyHeader and Security dependency correctly. -> Option A
  4. Quick Check:

    Security dependency with APIKeyHeader = from fastapi import Depends, Security from fastapi.security import APIKeyHeader api_key_header = APIKeyHeader(name="Authorization") @app.get("/secure") async def secure_route(api_key: str = Security(api_key_header)): return {"key": api_key} [OK]
Hint: Look for APIKeyHeader and Security usage together [OK]
Common Mistakes:
  • Using Depends with a string instead of a dependency
  • Missing APIKeyHeader import or usage
  • Not using Security for header token checks
3. Given this FastAPI route, what will be the response if the client sends a request without the required API key header?
from fastapi import FastAPI, Security
from fastapi.security import APIKeyHeader

app = FastAPI()
api_key_header = APIKeyHeader(name="X-API-Key")

@app.get("/data")
async def get_data(api_key: str = Security(api_key_header)):
    return {"message": "Access granted", "key": api_key}
medium
A. HTTP 404 Not Found error
B. {"message": "Access granted", "key": "some_key"}
C. HTTP 403 Forbidden error
D. {"message": "Access denied"}

Solution

  1. Step 1: Understand APIKeyHeader behavior

    APIKeyHeader raises a 403 error if the required header is missing in the request.
  2. Step 2: Analyze the route response

    The route returns data only if the API key header is present; otherwise, FastAPI returns 403 Forbidden automatically.
  3. Final Answer:

    HTTP 403 Forbidden error -> Option C
  4. Quick Check:

    Missing API key header = 403 error [OK]
Hint: Missing API key header causes 403 error in FastAPI [OK]
Common Mistakes:
  • Expecting 404 error instead of 403
  • Assuming a custom message is returned automatically
  • Thinking the route runs without the header
4. Identify the error in this FastAPI security code snippet:
from fastapi import FastAPI, Security
from fastapi.security import APIKeyHeader

app = FastAPI()
api_key_header = APIKeyHeader(name="Authorization")

@app.get("/secure")
async def secure_route(api_key: str = Depends(api_key_header)):
    return {"key": api_key}
medium
A. Function should not be async
B. Missing import of Depends
C. APIKeyHeader name should be "X-API-Key"
D. Using Depends instead of Security for APIKeyHeader dependency

Solution

  1. Step 1: Check for import errors

    The code uses 'Depends(api_key_header)' but 'Depends' is not imported. Only FastAPI and Security are imported from fastapi.
  2. Step 2: Confirm dependency usage is otherwise correct

    Using Depends with APIKeyHeader is valid; adding 'from fastapi import Depends' would fix it. Header name and async are fine.
  3. Final Answer:

    Missing import of Depends -> Option B
  4. Quick Check:

    Missing Depends import causes NameError [OK]
Hint: Always import Depends for FastAPI dependencies [OK]
Common Mistakes:
  • Confusing Depends and Security usage
  • Thinking header name must be fixed
  • Believing async is not allowed
5. You want to protect a FastAPI endpoint so only users with a valid token can access it. Which approach best combines security and user trust?
hard
A. Use FastAPI's Security dependency to check tokens and return 403 if invalid, ensuring data is safe.
B. Allow all requests but log invalid tokens for later review.
C. Return data without checks but encrypt the response payload.
D. Use a custom header but do not verify its value.

Solution

  1. Step 1: Identify secure token checking method

    FastAPI's Security dependency allows automatic token validation and blocks unauthorized access.
  2. Step 2: Understand impact on user trust

    Blocking invalid tokens protects data and builds trust by preventing leaks or misuse.
  3. Final Answer:

    Use FastAPI's Security dependency to check tokens and return 403 if invalid, ensuring data is safe. -> Option A
  4. Quick Check:

    Security dependency + token check = safe and trusted API [OK]
Hint: Check tokens with Security to block unauthorized users [OK]
Common Mistakes:
  • Allowing all requests without validation
  • Relying only on encryption without access control
  • Not verifying header values properly