Bird
Raised Fist0
GraphQLquery~5 mins

Input validation patterns in GraphQL - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is input validation in GraphQL?
Input validation in GraphQL means checking the data sent by users to make sure it is correct and safe before using it in the system.
Click to reveal answer
beginner
Why is input validation important in GraphQL APIs?
It helps prevent errors and security problems by making sure only valid and expected data is accepted.
Click to reveal answer
intermediate
Name a common pattern to validate inputs in GraphQL schemas.
Using custom scalar types or input types with specific fields and constraints to check data format and values.
Click to reveal answer
intermediate
How can you validate an email input in GraphQL?
Create a custom scalar type for email that checks the string matches an email pattern before accepting it.
Click to reveal answer
intermediate
What role do resolver functions play in input validation?
Resolvers can add extra checks on inputs before processing, ensuring data meets business rules beyond schema validation.
Click to reveal answer
What is the first step in input validation in GraphQL?
ADesign UI forms
BDefine input types with constraints
CCreate database tables
DWrite resolver functions
Which GraphQL feature helps enforce input formats like email or date?
ADirectives
BFragments
CSubscriptions
DCustom scalar types
Where can you add extra input validation beyond schema checks?
AIn resolver functions
BIn the database only
CIn the client UI only
DIn GraphQL queries
What happens if input validation fails in GraphQL?
AThe query returns an error
BThe query runs anyway
CThe server crashes
DThe input is ignored silently
Which is NOT a good practice for input validation in GraphQL?
AValidate inputs in schema and resolvers
BUse custom scalars for special formats
CTrust all client inputs without checks
DReturn clear error messages on invalid input
Explain how input validation works in GraphQL and why it is important.
Think about how GraphQL schema helps check data.
You got /3 concepts.
    Describe two ways to implement input validation in a GraphQL API.
    Consider schema design and resolver roles.
    You got /2 concepts.

      Practice

      (1/5)
      1. What is the main purpose of input validation in GraphQL schemas?
      easy
      A. To ensure data is safe and correct before processing
      B. To speed up query execution
      C. To automatically generate UI forms
      D. To store data in multiple databases

      Solution

      1. Step 1: Understand input validation role

        Input validation checks data before it is saved or used to avoid errors or security issues.
      2. Step 2: Identify main goal in GraphQL

        GraphQL uses input validation to keep data safe and correct before processing.
      3. Final Answer:

        To ensure data is safe and correct before processing -> Option A
      4. Quick Check:

        Input validation = data safety and correctness [OK]
      Hint: Input validation means checking data before use [OK]
      Common Mistakes:
      • Confusing validation with performance optimization
      • Thinking validation auto-generates UI
      • Assuming validation stores data
      2. Which of the following is a valid way to enforce input validation in a GraphQL schema?
      easy
      A. Using HTML tags in schema definitions
      B. Writing SQL queries inside the schema
      C. Adding CSS styles to input fields
      D. Using custom scalar types for specific formats

      Solution

      1. Step 1: Review GraphQL schema capabilities

        GraphQL schemas can define custom scalar types to validate formats like email or date.
      2. Step 2: Eliminate invalid options

        SQL queries, CSS, and HTML are unrelated to schema validation.
      3. Final Answer:

        Using custom scalar types for specific formats -> Option D
      4. Quick Check:

        Custom scalars = validation in schema [OK]
      Hint: Custom scalars validate input formats in GraphQL [OK]
      Common Mistakes:
      • Confusing schema with UI styling
      • Trying to embed SQL in schema
      • Using HTML tags in schema definitions
      3. Given this GraphQL input type and resolver snippet, what happens if the input 'username' is an empty string?
      input UserInput {
        username: String!
      }
      
      resolver createUser(input: UserInput) {
        if (input.username.length === 0) {
          throw new Error('Username cannot be empty');
        }
        return saveUser(input);
      }
      medium
      A. The resolver ignores the username field
      B. The resolver throws an error and user is not saved
      C. The user is saved with an empty username
      D. The schema rejects the query before resolver runs

      Solution

      1. Step 1: Analyze resolver input check

        The resolver checks if username length is zero and throws an error if true.
      2. Step 2: Understand effect of empty string input

        Empty string triggers the error, so user is not saved.
      3. Final Answer:

        The resolver throws an error and user is not saved -> Option B
      4. Quick Check:

        Empty username triggers error in resolver [OK]
      Hint: Empty string triggers error in resolver check [OK]
      Common Mistakes:
      • Assuming schema rejects empty string automatically
      • Thinking empty username is saved
      • Ignoring resolver error handling
      4. Identify the error in this GraphQL input validation snippet:
      input ProductInput {
        price: Float!
      }
      
      resolver addProduct(input: ProductInput) {
        if (input.price < 0) {
          return 'Price must be positive';
        }
        saveProduct(input);
        return 'Product added';
      }
      medium
      A. Returning a string error instead of throwing an error
      B. Missing input type declaration
      C. Using Float instead of Int for price
      D. No validation for price being zero

      Solution

      1. Step 1: Check error handling in resolver

        The resolver returns a string on error instead of throwing an error, which may not stop execution properly.
      2. Step 2: Understand proper error signaling

        Throwing an error is standard to halt processing and signal failure in GraphQL.
      3. Final Answer:

        Returning a string error instead of throwing an error -> Option A
      4. Quick Check:

        Errors should be thrown, not returned as strings [OK]
      Hint: Throw errors, don't return error strings in resolvers [OK]
      Common Mistakes:
      • Returning error messages instead of throwing
      • Confusing Float and Int types
      • Ignoring zero price validation
      5. You want to enforce that a user's email input is always lowercase and matches a valid email format in GraphQL. Which combination is the best approach?
      hard
      A. Use a directive to reject any uppercase letters without transformation
      B. Only rely on GraphQL's String type without extra checks
      C. Use a custom scalar for email format and transform input to lowercase in resolver
      D. Validate email format in the database after saving

      Solution

      1. Step 1: Understand validation needs

        Email must be valid format and lowercase before saving or processing.
      2. Step 2: Choose best GraphQL validation method

        Custom scalar can enforce format; resolver can transform input to lowercase.
      3. Step 3: Evaluate other options

        Relying only on String misses validation; directives alone can't transform; database validation is late.
      4. Final Answer:

        Use a custom scalar for email format and transform input to lowercase in resolver -> Option C
      5. Quick Check:

        Custom scalar + resolver transform = best validation [OK]
      Hint: Combine custom scalar and resolver for format and case [OK]
      Common Mistakes:
      • Skipping format validation
      • Expecting directives to transform input
      • Validating only after saving data