Bird
Raised Fist0
FastAPIframework~5 mins

Multiple response types in FastAPI - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of using multiple response types in FastAPI?
Multiple response types let your API send different kinds of data depending on the request or situation, like JSON, HTML, or files. This makes your API flexible and user-friendly.
Click to reveal answer
beginner
How do you specify a JSON response in FastAPI?
By default, FastAPI returns JSON. You can also use response_model to define the data shape and FastAPI will convert your Python objects to JSON automatically.
Click to reveal answer
intermediate
How can you return an HTML response in FastAPI?
Use HTMLResponse from fastapi.responses and return it with your HTML content as a string. This tells FastAPI to send HTML instead of JSON.
Click to reveal answer
intermediate
What is the role of Response classes in FastAPI for multiple response types?
Response classes like JSONResponse, HTMLResponse, and FileResponse help you control exactly how data is sent back, including headers and content type.
Click to reveal answer
advanced
How do you handle multiple possible response types in a single FastAPI endpoint?
You can check request details or data conditions inside your endpoint and return different Response types accordingly. FastAPI will send the correct content type based on what you return.
Click to reveal answer
Which FastAPI class is used to return HTML content?
AHTMLResponse
BJSONResponse
CFileResponse
DPlainTextResponse
What is the default response type in FastAPI if none is specified?
AHTML
BPlain text
CJSON
DXML
How can you return a file for download in FastAPI?
AUse PlainTextResponse
BUse JSONResponse
CUse HTMLResponse
DUse FileResponse
To return different response types from one endpoint, you should:
AUse multiple endpoints
BCheck conditions inside the endpoint and return different Response classes
COnly return JSON
DUse a single Response class always
Which parameter helps FastAPI validate and serialize JSON responses?
Aresponse_model
Bresponse_class
Cstatus_code
Dcontent_type
Explain how you can return both JSON and HTML responses from a single FastAPI endpoint.
Think about checking request or data and returning different Response classes.
You got /3 concepts.
    Describe the role of Response classes in managing multiple response types in FastAPI.
    Response classes help format and send data properly.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using multiple response types in a FastAPI route?
      easy
      A. To speed up the API response time by caching
      B. To allow the API to send different response formats based on conditions
      C. To restrict the API to only one response format
      D. To automatically generate database schemas

      Solution

      1. Step 1: Understand response types in FastAPI

        Multiple response types let an API send different formats like JSON or HTML depending on the request or logic.
      2. Step 2: Identify the purpose

        This flexibility helps clients get the response format they expect or need.
      3. Final Answer:

        To allow the API to send different response formats based on conditions -> Option B
      4. Quick Check:

        Multiple response types = different formats [OK]
      Hint: Multiple response types mean flexible output formats [OK]
      Common Mistakes:
      • Thinking it speeds up response time
      • Believing it restricts to one format
      • Confusing with database schema generation
      2. Which of the following is the correct way to declare multiple response types in a FastAPI route decorator?
      easy
      A. @app.get('/items', responses={200: {'content': {'application/json': {}}}})
      B. @app.get('/items', response_formats=['json', 'html'])
      C. @app.get('/items', response_type=['json', 'html'])
      D. @app.get('/items', responses={200: {'content': {'application/json': {}, 'text/html': {}}}})

      Solution

      1. Step 1: Review FastAPI response declaration syntax

        FastAPI uses the 'responses' parameter with status codes and content types as keys.
      2. Step 2: Identify correct syntax for multiple types

        @app.get('/items', responses={200: {'content': {'application/json': {}, 'text/html': {}}}}) correctly shows multiple content types under the 200 status code.
      3. Final Answer:

        @app.get('/items', responses={200: {'content': {'application/json': {}, 'text/html': {}}}}) -> Option D
      4. Quick Check:

        responses param with content dict = @app.get('/items', responses={200: {'content': {'application/json': {}, 'text/html': {}}}}) [OK]
      Hint: Use 'responses' with content dict for multiple types [OK]
      Common Mistakes:
      • Using non-existent parameters like response_type
      • Declaring only one content type when multiple needed
      • Incorrect dictionary structure in responses
      3. Given this FastAPI route, what will be the response content type if return HTMLResponse(content='Hello') is used?
      from fastapi import FastAPI
      from fastapi.responses import JSONResponse, HTMLResponse
      
      app = FastAPI()
      
      @app.get('/greet', responses={200: {'content': {'application/json': {}, 'text/html': {}}}})
      async def greet(html: bool = False):
          if html:
              return HTMLResponse(content='Hello')
          return JSONResponse(content={'message': 'Hello'})
      medium
      A. text/html
      B. application/json
      C. application/xml
      D. text/plain

      Solution

      1. Step 1: Check the return type when html=True

        The function returns HTMLResponse with content 'Hello' when html is True.
      2. Step 2: Identify the content type of HTMLResponse

        HTMLResponse sets the content type to 'text/html'.
      3. Final Answer:

        text/html -> Option A
      4. Quick Check:

        HTMLResponse = text/html [OK]
      Hint: HTMLResponse means content type text/html [OK]
      Common Mistakes:
      • Assuming JSONResponse is always returned
      • Confusing content type with return value
      • Ignoring the condition that triggers HTMLResponse
      4. Identify the error in this FastAPI route that tries to return multiple response types:
      from fastapi import FastAPI
      from fastapi.responses import JSONResponse, PlainTextResponse
      
      app = FastAPI()
      
      @app.get('/data', responses={200: {'content': {'application/json': {}, 'text/plain': {}}}})
      async def data(response_type: str):
          if response_type == 'json':
              return JSONResponse(content={'key': 'value'})
          else:
              return 'Just plain text'
      medium
      A. responses dictionary is incorrectly formatted
      B. Missing import for PlainTextResponse
      C. Returning a plain string instead of a Response object for plain text
      D. Function should not be async

      Solution

      1. Step 1: Check return types in the function

        When response_type is not 'json', the function returns a plain string instead of a Response object.
      2. Step 2: Understand FastAPI response requirements

        FastAPI expects a Response object like PlainTextResponse for non-JSON responses to set headers correctly.
      3. Final Answer:

        Returning a plain string instead of a Response object for plain text -> Option C
      4. Quick Check:

        Plain string return needs PlainTextResponse [OK]
      Hint: Return Response objects, not raw strings for non-JSON [OK]
      Common Mistakes:
      • Returning raw strings instead of Response objects
      • Ignoring response content type headers
      • Assuming async is not needed
      5. You want a FastAPI route to return JSON by default but HTML if a query parameter ?format=html is given. Which approach correctly implements this with multiple response types?
      from fastapi import FastAPI, Request
      from fastapi.responses import JSONResponse, HTMLResponse
      
      app = FastAPI()
      
      @app.get('/info', responses={200: {'content': {'application/json': {}, 'text/html': {}}}})
      async def info(request: Request):
          format = request.query_params.get('format')
          if format == 'html':
              # What to return here?
          else:
              return JSONResponse(content={'info': 'data'})
      hard
      A. return HTMLResponse(content='

      Info

      ')
      B. return {'info': '

      Info

      '}
      C. return JSONResponse(content={'info': '

      Info

      '})
      D. return Response(content='

      Info

      ', media_type='application/json')

      Solution

      1. Step 1: Check the condition for HTML format

        If the query parameter 'format' equals 'html', the route should return an HTML response.
      2. Step 2: Use the correct response class for HTML

        HTMLResponse sets the content type to 'text/html' and sends HTML content properly.
      3. Final Answer:

        return HTMLResponse(content='<h1>Info</h1>') -> Option A
      4. Quick Check:

        HTMLResponse for HTML output = return HTMLResponse(content='<h1>Info</h1>') [OK]
      Hint: Use HTMLResponse to send HTML content explicitly [OK]
      Common Mistakes:
      • Returning dict with HTML string instead of HTMLResponse
      • Using JSONResponse with HTML content type
      • Setting wrong media_type in Response
      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