Bird
Raised Fist0
Rest APIprogramming~20 mins

Content negotiation in Rest API - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Content Negotiation Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this HTTP Accept header handling code?

Consider a REST API server that supports JSON and XML responses. The server code snippet below processes the Accept header to decide the response format.

accept_header = 'application/xml,application/json;q=0.9'

if 'application/json' in accept_header:
    response = 'JSON response'
elif 'application/xml' in accept_header:
    response = 'XML response'
else:
    response = 'Default response'

What will be the value of response after running this code?

Rest API
accept_header = 'application/xml,application/json;q=0.9'

if 'application/json' in accept_header:
    response = 'JSON response'
elif 'application/xml' in accept_header:
    response = 'XML response'
else:
    response = 'Default response'
AJSON response
BXML response
CDefault response
DError: header parsing failed
Attempts:
2 left
💡 Hint

Check the order of if and elif conditions and how substring matching works.

🧠 Conceptual
intermediate
1:00remaining
Which HTTP header is primarily used for content negotiation?

In REST APIs, clients specify the desired response format using a specific HTTP header. Which header is this?

AUser-Agent
BAuthorization
CContent-Type
DAccept
Attempts:
2 left
💡 Hint

It tells the server what media types the client can handle.

❓ Predict Output
advanced
2:00remaining
What is the output of this server content negotiation snippet?

Given the following Python code snippet simulating content negotiation, what will be printed?

accept_header = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'

if 'application/json' in accept_header:
    print('Send JSON')
elif 'application/xml' in accept_header:
    print('Send XML')
elif 'text/html' in accept_header:
    print('Send HTML')
else:
    print('Send default')
Rest API
accept_header = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'

if 'application/json' in accept_header:
    print('Send JSON')
elif 'application/xml' in accept_header:
    print('Send XML')
elif 'text/html' in accept_header:
    print('Send HTML')
else:
    print('Send default')
ASend XML
BSend HTML
CSend JSON
DSend default
Attempts:
2 left
💡 Hint

Check the order of conditions and presence of substrings in the header string.

🔧 Debug
advanced
2:30remaining
Why does this content negotiation code always return JSON?

Look at this Python code snippet:

accept_header = 'application/xml'

if accept_header == 'application/json' or 'application/xml':
    response = 'JSON response'
else:
    response = 'Default response'

Why does response always become 'JSON response' even when accept_header is 'application/xml'?

Rest API
accept_header = 'application/xml'

if accept_header == 'application/json' or 'application/xml':
    response = 'JSON response'
else:
    response = 'Default response'
ABecause accept_header is overwritten before the if statement
BBecause the code compares accept_header to both strings correctly
CBecause 'application/xml' is always truthy, so the condition is always true
DBecause the else block is never reached due to syntax error
Attempts:
2 left
💡 Hint

Look carefully at how the or operator is used in the condition.

🚀 Application
expert
3:00remaining
How many media types will this content negotiation dictionary contain?

Given this Python dictionary comprehension that parses an Accept header string into media types and their quality factors:

accept_header = 'text/html,application/json;q=0.8,application/xml;q=0.9'

media_types = {part.split(';')[0]: float(part.split('q=')[1]) if 'q=' in part else 1.0 for part in accept_header.split(',')}

print(len(media_types))

What is the output of the print statement?

Rest API
accept_header = 'text/html,application/json;q=0.8,application/xml;q=0.9'

media_types = {part.split(';')[0]: float(part.split('q=')[1]) if 'q=' in part else 1.0 for part in accept_header.split(',')}

print(len(media_types))
A2
B3
C1
DRaises ValueError
Attempts:
2 left
💡 Hint

Count how many unique media types are extracted from the header string.

Practice

(1/5)
1. What is the main purpose of content negotiation in REST APIs?
easy
A. To allow clients to specify the data format they want using the Accept header
B. To encrypt data between client and server
C. To authenticate users before sending data
D. To compress data for faster transfer

Solution

  1. Step 1: Understand content negotiation role

    Content negotiation lets clients tell servers what data format they prefer.
  2. Step 2: Identify how clients specify format

    Clients use the Accept header to communicate their preferred format.
  3. Final Answer:

    To allow clients to specify the data format they want using the Accept header -> Option A
  4. Quick Check:

    Content negotiation = Accept header usage [OK]
Hint: Remember: Accept header tells server your preferred format [OK]
Common Mistakes:
  • Confusing content negotiation with authentication
  • Thinking it compresses data
  • Believing it encrypts data
2. Which of the following is the correct way to specify JSON format in the Accept header?
easy
A. Accept: application/xml
B. Accept: text/html
C. Accept: image/png
D. Accept: application/json

Solution

  1. Step 1: Recall MIME types for common formats

    JSON format uses the MIME type 'application/json'.
  2. Step 2: Match Accept header to JSON

    The correct Accept header for JSON is 'Accept: application/json'.
  3. Final Answer:

    Accept: application/json -> Option D
  4. Quick Check:

    JSON MIME type = application/json [OK]
Hint: JSON MIME type always is application/json in Accept header [OK]
Common Mistakes:
  • Using text/html for JSON
  • Confusing image/png with data formats
  • Using application/xml instead of JSON
3. Given this HTTP request header:
Accept: application/xml, application/json;q=0.8
Which content type will the server most likely respond with?
medium
A. application/xml
B. application/pdf
C. text/html
D. application/json

Solution

  1. Step 1: Understand quality values (q) in Accept header

    The q value shows preference; higher q means higher priority.
  2. Step 2: Compare q values for application/xml and application/json

    application/xml has no q value, so defaults to 1. application/json has q=0.8, lower priority.
  3. Final Answer:

    application/xml -> Option A
  4. Quick Check:

    Higher q or default 1 wins = application/xml [OK]
Hint: No q means 1.0, highest priority wins [OK]
Common Mistakes:
  • Ignoring q values and picking lower priority
  • Choosing JSON because it appears second
  • Selecting unrelated content types
4. A server returns a 406 Not Acceptable error. What is the most likely cause related to content negotiation?
medium
A. Server failed to authenticate the client
B. Client requested a format the server cannot provide
C. Client sent an invalid HTTP method
D. Server ran out of memory

Solution

  1. Step 1: Understand HTTP 406 status meaning

    406 means server cannot provide a response matching the Accept header.
  2. Step 2: Link 406 to content negotiation failure

    If client requests unsupported format, server responds 406 Not Acceptable.
  3. Final Answer:

    Client requested a format the server cannot provide -> Option B
  4. Quick Check:

    406 = unsupported requested format [OK]
Hint: 406 means no matching format found for Accept header [OK]
Common Mistakes:
  • Confusing 406 with authentication errors
  • Thinking 406 means server error
  • Assuming 406 is about HTTP methods
5. You want your REST API to support both JSON and XML responses. Which server-side approach correctly implements content negotiation?
hard
A. Ignore the Accept header and always send JSON
B. Send both JSON and XML in the same response body
C. Check the Accept header and respond with JSON or XML accordingly
D. Respond with XML only if the client sends a custom header

Solution

  1. Step 1: Understand content negotiation best practice

    The server should read the Accept header to decide response format.
  2. Step 2: Choose approach matching client preference

    Responding with JSON or XML based on Accept header is correct behavior.
  3. Final Answer:

    Check the Accept header and respond with JSON or XML accordingly -> Option C
  4. Quick Check:

    Content negotiation = respond per Accept header [OK]
Hint: Always respect Accept header to choose response format [OK]
Common Mistakes:
  • Ignoring Accept header and hardcoding response
  • Sending multiple formats in one response
  • Using unrelated custom headers for format choice
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