Bird
Raised Fist0
Rest APIprogramming~10 mins

Problem Details (RFC 7807) format in Rest API - Interactive Code Practice

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 set the 'type' field in the Problem Details JSON.

Rest API
{
  "type": "[1]",
  "title": "Invalid Request",
  "status": 400
}
Drag options to blanks, or click blank then click option'
Aerror
Babout:blank
Chttp://example.com/error
Dhttps://example.com/probs/out-of-credit
Attempts:
3 left
💡 Hint
Common Mistakes
Using a plain string instead of a URI for 'type'.
Leaving the 'type' field empty.
2fill in blank
medium

Complete the code to add the 'detail' field explaining the error.

Rest API
{
  "type": "about:blank",
  "title": "Invalid Request",
  "status": 400,
  "detail": "[1]"
}
Drag options to blanks, or click blank then click option'
AThe request parameters are invalid.
BInvalid
C400
DError
Attempts:
3 left
💡 Hint
Common Mistakes
Putting a status code number instead of a message.
Using a single word instead of a full explanation.
3fill in blank
hard

Fix the error in the 'status' field to use the correct HTTP status code.

Rest API
{
  "type": "about:blank",
  "title": "Not Found",
  "status": [1]
}
Drag options to blanks, or click blank then click option'
A"404"
B400
C404
DNotFound
Attempts:
3 left
💡 Hint
Common Mistakes
Using a string instead of a number for status.
Using the wrong status code.
4fill in blank
hard

Fill both blanks to add an 'instance' URI and a custom 'error_code' field.

Rest API
{
  "type": "about:blank",
  "title": "Unauthorized",
  "status": 401,
  "instance": "[1]",
  "error_code": "[2]"
}
Drag options to blanks, or click blank then click option'
A/login
B/home
CAUTH_001
DERR_404
Attempts:
3 left
💡 Hint
Common Mistakes
Using a full URL instead of a relative URI for 'instance'.
Using a wrong or unrelated error code.
5fill in blank
hard

Fill all three blanks to create a Problem Details JSON with a custom type, title, and status.

Rest API
{
  "type": "[1]",
  "title": "[2]",
  "status": [3]
}
Drag options to blanks, or click blank then click option'
Ahttps://example.com/probs/out-of-credit
BOut of Credit
C403
DForbidden
Attempts:
3 left
💡 Hint
Common Mistakes
Putting the status code as a string.
Using a non-URI string for 'type'.

Practice

(1/5)
1. What is the main purpose of the Problem Details (RFC 7807) format in REST APIs?
easy
A. To speed up API response times
B. To standardize error responses so clients can understand errors better
C. To encrypt API responses for security
D. To format successful data responses uniformly

Solution

  1. Step 1: Understand the role of Problem Details format

    The format is designed to provide a consistent way to report errors in APIs.
  2. Step 2: Identify the main benefit

    It helps clients understand and handle errors better by standardizing error responses.
  3. Final Answer:

    To standardize error responses so clients can understand errors better -> Option B
  4. Quick Check:

    Purpose = Standardize error responses [OK]
Hint: Remember: Problem Details = standardized error info [OK]
Common Mistakes:
  • Confusing error format with data encryption
  • Thinking it speeds up API responses
  • Assuming it formats successful responses
2. Which of the following is a REQUIRED field in the Problem Details JSON object according to RFC 7807?
easy
A. type
B. status
C. detail
D. instance

Solution

  1. Step 1: Recall required fields in RFC 7807

    The RFC requires the "type" field to identify the error type URI.
  2. Step 2: Check other fields

    Fields like "status", "detail", and "instance" are optional but recommended.
  3. Final Answer:

    type -> Option A
  4. Quick Check:

    Required field = type [OK]
Hint: Only 'type' is mandatory in Problem Details [OK]
Common Mistakes:
  • Assuming 'status' is required
  • Confusing 'detail' as mandatory
  • Thinking 'instance' is always needed
3. Given this Problem Details JSON response:
{"type": "https://example.com/probs/out-of-credit", "title": "You do not have enough credit.", "status": 403, "detail": "Your current balance is 30, but that costs 50.", "instance": "/account/12345/msgs/abc"}

What is the HTTP status code indicated?
medium
A. 403
B. 404
C. 200
D. 500

Solution

  1. Step 1: Locate the status field in JSON

    The JSON has "status": 403, which indicates the HTTP status code.
  2. Step 2: Understand the meaning of 403

    403 means Forbidden, matching the error about insufficient credit.
  3. Final Answer:

    403 -> Option A
  4. Quick Check:

    Status code = 403 [OK]
Hint: Look for 'status' field for HTTP code [OK]
Common Mistakes:
  • Confusing status with 'detail' content
  • Picking 200 as success code
  • Ignoring the numeric status field
4. You receive this Problem Details JSON:
{"title": "Invalid input", "status": 400, "detail": "Missing required field 'name'"}

What is missing that violates RFC 7807 requirements?
medium
A. The 'title' field should be a URL
B. The 'status' field should be a string
C. The 'detail' field should be omitted
D. The 'type' field is missing

Solution

  1. Step 1: Check required fields in the JSON

    The 'type' field is required by RFC 7807 but is missing here.
  2. Step 2: Validate other fields

    'status' is correctly a number, 'detail' and 'title' are valid types.
  3. Final Answer:

    The 'type' field is missing -> Option D
  4. Quick Check:

    Missing required field = type [OK]
Hint: Always include 'type' field in Problem Details [OK]
Common Mistakes:
  • Thinking 'status' must be string
  • Removing 'detail' field
  • Assuming 'title' must be URL
5. You want to create a Problem Details response for a rate limit error. Which JSON object correctly follows RFC 7807 and clearly informs the client about the error?
hard
A. {"type": "rate-limit", "title": "Error", "status": 429, "detail": "Limit reached"}
B. {"title": "Rate limit exceeded", "status": "429", "detail": "Too many requests", "instance": "/api/v1/resource"}
C. {"type": "https://example.com/probs/rate-limit", "title": "Rate limit exceeded", "status": 429, "detail": "You have sent too many requests in a short time.", "instance": "/api/v1/resource"}
D. {"type": "https://example.com/probs/rate-limit", "title": "Rate limit exceeded", "status": 200, "detail": "Too many requests"}

Solution

  1. Step 1: Check required fields and correct types

    {"type": "https://example.com/probs/rate-limit", "title": "Rate limit exceeded", "status": 429, "detail": "You have sent too many requests in a short time.", "instance": "/api/v1/resource"} includes 'type' as a URI, 'title', numeric 'status' 429, 'detail', and 'instance' fields correctly.
  2. Step 2: Validate status code and clarity

    Status 429 means Too Many Requests, matching the error. Other options have missing or wrong fields or wrong status codes.
  3. Final Answer:

    {"type": "https://example.com/probs/rate-limit", "title": "Rate limit exceeded", "status": 429, "detail": "You have sent too many requests in a short time.", "instance": "/api/v1/resource"} -> Option C
  4. Quick Check:

    Correct fields and status = {"type": "https://example.com/probs/rate-limit", "title": "Rate limit exceeded", "status": 429, "detail": "You have sent too many requests in a short time.", "instance": "/api/v1/resource"} [OK]
Hint: Use URI in 'type' and correct numeric 'status' [OK]
Common Mistakes:
  • Using string instead of number for status
  • Missing 'type' or using non-URI string
  • Wrong HTTP status code for error