Bird
Raised Fist0
GraphQLquery~5 mins

Custom error extensions in GraphQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What are custom error extensions in GraphQL?
Custom error extensions are additional fields added to GraphQL error responses to provide more details about the error, such as error codes or extra context.
Click to reveal answer
intermediate
How do you add custom error extensions in a GraphQL resolver?
You throw an error with an 'extensions' property, for example:
throw new ApolloError('Not found', 'NOT_FOUND', { resource: 'User' }) where the third argument adds custom extensions.
Click to reveal answer
beginner
Why use custom error extensions instead of just error messages?
Custom extensions allow clients to programmatically identify error types and handle them differently, improving user experience and debugging.
Click to reveal answer
beginner
What is the standard field name for custom error details in GraphQL errors?
The standard field name is 'extensions'. It is an object that can hold any extra information about the error.
Click to reveal answer
intermediate
Give an example of a custom error extension field you might add.
You might add a field like { code: 'UNAUTHENTICATED', timestamp: '2024-06-01T12:00:00Z' } to indicate the error type and when it happened.
Click to reveal answer
What is the purpose of the 'extensions' field in a GraphQL error?
ATo store the query string
BTo hold the user's authentication token
CTo provide extra structured information about the error
DTo define the GraphQL schema
How do you include custom error extensions when throwing an error in Apollo Server?
ABy changing the HTTP status code
BBy passing an object as the third argument to ApolloError
CBy adding a new query
DBy modifying the GraphQL schema
Which of these is NOT a good reason to use custom error extensions?
ATo store sensitive user passwords
BTo provide user-friendly error codes
CTo help clients handle errors programmatically
DTo add timestamps or context to errors
What type of data can the 'extensions' field contain?
AAny JSON-serializable data
BOnly numbers
COnly strings
DOnly booleans
If you want to indicate an error is due to authentication failure, which extension code might you use?
ASUCCESS
BNOT_FOUND
CINTERNAL_ERROR
DUNAUTHENTICATED
Explain how custom error extensions improve error handling in GraphQL.
Think about why just an error message might not be enough.
You got /4 concepts.
    Describe how to add custom error extensions in a GraphQL resolver using Apollo Server.
    Focus on the ApolloError constructor parameters.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using extensions in GraphQL error responses?
      easy
      A. To change the data returned by the query
      B. To hide errors from the client
      C. To speed up the query execution
      D. To provide extra information like error codes and details

      Solution

      1. Step 1: Understand the role of error extensions

        Extensions add extra info to errors, such as codes or metadata.
      2. Step 2: Compare with other options

        Extensions do not change data, speed, or hide errors; they enrich error info.
      3. Final Answer:

        To provide extra information like error codes and details -> Option D
      4. Quick Check:

        Extensions add info = B [OK]
      Hint: Extensions add details to errors, not data or speed [OK]
      Common Mistakes:
      • Thinking extensions change query data
      • Assuming extensions hide errors
      • Confusing extensions with performance tools
      2. Which of the following is the correct way to add a custom error extension in a GraphQL error object?
      easy
      A. { message: 'Error', extensions: ['BAD_REQUEST'] }
      B. { message: 'Error', code: 'BAD_REQUEST' }
      C. { message: 'Error', extensions: { code: 'BAD_REQUEST' } }
      D. { error: 'Error', extensions: 'BAD_REQUEST' }

      Solution

      1. Step 1: Identify correct error object structure

        The error object must have a message and an extensions object with code inside.
      2. Step 2: Check each option's syntax

        { message: 'Error', extensions: { code: 'BAD_REQUEST' } } correctly nests code inside extensions; others misuse or misplace fields.
      3. Final Answer:

        { message: 'Error', extensions: { code: 'BAD_REQUEST' } } -> Option C
      4. Quick Check:

        Extensions is an object with code = D [OK]
      Hint: Extensions must be an object with keys like code [OK]
      Common Mistakes:
      • Putting code outside extensions
      • Using extensions as a string or array
      • Misnaming fields like error instead of message
      3. Given this GraphQL error response:
      {"errors":[{"message":"Not found","extensions":{"code":"NOT_FOUND","timestamp":"2024-06-01T12:00:00Z"}}]}

      What will the client see in the extensions field?
      medium
      A. {"code":"NOT_FOUND","timestamp":"2024-06-01T12:00:00Z"}
      B. "Not found"
      C. {"message":"Not found"}
      D. An empty object {}

      Solution

      1. Step 1: Locate the extensions field in the error

        The extensions field contains code and timestamp as key-value pairs.
      2. Step 2: Understand what client receives

        The client sees the extensions object exactly as given, with code and timestamp.
      3. Final Answer:

        {"code":"NOT_FOUND","timestamp":"2024-06-01T12:00:00Z"} -> Option A
      4. Quick Check:

        Extensions content = A [OK]
      Hint: Extensions field shows all custom error details as object [OK]
      Common Mistakes:
      • Confusing message with extensions
      • Expecting extensions to be a string
      • Ignoring extra fields like timestamp
      4. You wrote this error response in your GraphQL server:
      { message: 'Unauthorized', extensions: 'AUTH_ERROR' }

      Why does this cause a problem?
      medium
      A. Extensions must be an object, not a string
      B. Message cannot be 'Unauthorized'
      C. Extensions field is missing
      D. The error object must not have extensions

      Solution

      1. Step 1: Check the type of extensions field

        Extensions must be an object with key-value pairs, not a string.
      2. Step 2: Identify the error cause

        Using a string for extensions causes syntax or runtime errors in GraphQL.
      3. Final Answer:

        Extensions must be an object, not a string -> Option A
      4. Quick Check:

        Extensions type error = A [OK]
      Hint: Extensions must always be an object, never a string [OK]
      Common Mistakes:
      • Using string instead of object for extensions
      • Ignoring GraphQL error format rules
      • Assuming message content causes error
      5. You want to send a GraphQL error with a custom extension that includes an error code and a retry flag set to false. Which of these error objects correctly implements this?
      hard
      A. { message: 'Timeout', extensions: { code: 'TIMEOUT', retry: 0 } }
      B. { message: 'Timeout', extensions: { code: 'TIMEOUT', retry: false } }
      C. { message: 'Timeout', extensions: { code: 'TIMEOUT', retry: 'no' } }
      D. { message: 'Timeout', extensions: { code: 'TIMEOUT', retry: null } }

      Solution

      1. Step 1: Check the data types for extensions fields

        The retry flag should be a boolean false, not string or null or number.
      2. Step 2: Validate each option's retry value

        { message: 'Timeout', extensions: { code: 'TIMEOUT', retry: false } } uses boolean false correctly; others use wrong types.
      3. Final Answer:

        { message: 'Timeout', extensions: { code: 'TIMEOUT', retry: false } } -> Option B
      4. Quick Check:

        Boolean retry flag = C [OK]
      Hint: Use boolean false for retry, not string or null [OK]
      Common Mistakes:
      • Using string 'no' instead of boolean false
      • Using null or 0 for boolean flags
      • Ignoring correct data types in extensions
      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