Bird
Raised Fist0
GraphQLquery~10 mins

Required fields with non-null (!) in GraphQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Required fields with non-null (!)
Define field with !
↓
Field is required
↓
Client must provide value
↓
Server validates input
↓
If null or missing -> Error
↓
If valid -> Proceed
This flow shows how a GraphQL input field marked with ! is required, meaning clients must provide a non-null value or the server returns an error.
Execution Sample
GraphQL
input UserInput {
  id: ID!
  name: String!
  email: String
}

type User {
  id: ID!
}

type Mutation {
  createUser(input: UserInput!): User!
}

mutation {
  createUser(input: {id: "123", name: "John", email: "john@example.com"}) {
    id
  }
}

# Invalid example (would error):
# mutation {
#   createUser(input: {id: "123"}) { id }
# }
This mutation requires an input object with required 'id' and 'name' fields (non-null), and an optional 'email' field.
Execution Table
StepFieldValue ProvidedValidation ResultAction
1id"123"Valid (non-null)Accept value
2namenull or missingInvalid (null not allowed)Return error
3emailnull or missingValid (nullable)Accept as null
💡 Execution stops with error if any required (!) field is null or missing.
Variable Tracker
FieldStartAfter ValidationFinal
idundefined"123""123"
nameundefinednull or missingerror triggered
emailundefinednull or missingnull accepted
Key Moments - 2 Insights
Why does the server return an error if a required field is missing or null?
Because fields marked with ! must have a non-null value. The execution_table row 2 shows that if 'name' is null or missing, validation fails and an error is returned.
Can a field without ! be null or missing without error?
Yes, as shown in execution_table row 3, 'email' is nullable and can be null or missing without causing an error.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what happens if the 'id' field is null?
AThe server accepts it as null
BThe server ignores the field
CThe server returns an error
DThe server replaces it with a default value
💡 Hint
Refer to execution_table row 1 where 'id' must be non-null or error occurs
At which step does the server detect a missing required field?
AStep 1
BStep 2
CStep 3
DAfter all fields are processed
💡 Hint
Check execution_table row 2 where 'name' is missing or null and triggers error
If the 'email' field is missing, what does the server do?
AAccepts null value
BFills with default email
CReturns an error
DIgnores the entire user object
💡 Hint
See execution_table row 3 where 'email' is nullable and null is accepted
Concept Snapshot
GraphQL required input fields use ! after type.
This means the field cannot be null or missing in client input.
If client omits or sends null, server returns error.
Nullable fields (no !) can be null or missing safely.
Always provide values for ! fields in inputs/arguments.
Full Transcript
In GraphQL, input fields (in input types or arguments) marked with an exclamation mark (!) are required and must have a non-null value. When a client sends a query or mutation, the server checks these fields. If a required field is missing or null, the server returns an error and stops execution. Optional fields without ! can be null or missing without causing errors. This ensures data integrity by enforcing that important fields always have values.

Practice

(1/5)
1. What does adding ! after a field type in GraphQL schema mean?
easy
A. The field is required and cannot be null
B. The field is optional and can be null
C. The field is deprecated
D. The field is a list type

Solution

  1. Step 1: Understand the role of ! in GraphQL

    In GraphQL, adding ! after a type means the field is non-nullable, so it must have a value.
  2. Step 2: Interpret the meaning for data completeness

    This means the field is required and cannot be left empty or null, ensuring data completeness.
  3. Final Answer:

    The field is required and cannot be null -> Option A
  4. Quick Check:

    Non-null ! means required = C [OK]
Hint: Remember: ! means must have a value, no null allowed [OK]
Common Mistakes:
  • Thinking ! means optional
  • Confusing ! with list type
  • Assuming ! marks deprecated fields
2. Which of the following is the correct syntax to declare a required string field named name in GraphQL?
easy
A. name: String
B. name!: String
C. name: !String
D. name: String!

Solution

  1. Step 1: Recall GraphQL syntax for required fields

    In GraphQL, to make a field required, you add ! after the type, not before the type or after the field name.
  2. Step 2: Match the correct syntax

    The correct syntax is name: String! meaning the field name is a non-null string.
  3. Final Answer:

    name: String! -> Option D
  4. Quick Check:

    Required field syntax = type + ! after type [OK]
Hint: Put ! right after the type, never before field name [OK]
Common Mistakes:
  • Placing ! before the type
  • Adding ! after the field name
  • Omitting ! for required fields
3. Given this GraphQL type definition:
type User {
  id: ID!
  email: String!
  phone: String
}

Which of these queries will cause an error if email is missing in the data?
medium
A. Query requesting only phone
B. Query requesting id and phone only
C. Query requesting id and email
D. Query requesting only id

Solution

  1. Step 1: Identify required fields in the type

    The fields id and email are marked with !, so they must not be null or missing.
  2. Step 2: Analyze queries requesting email

    If the data is missing email, any query requesting it will cause an error because it's required.
  3. Final Answer:

    Query requesting id and email -> Option C
  4. Quick Check:

    Requesting missing required field causes error = A [OK]
Hint: Queries asking for missing required fields cause errors [OK]
Common Mistakes:
  • Assuming optional fields cause errors if missing
  • Ignoring ! meaning required
  • Thinking missing required fields return null
4. Consider this GraphQL schema snippet:
type Product {
  id: ID!
  name: String!
  description: String
}

Which change fixes the error when a query returns null for name?
medium
A. Add ! to description field
B. Remove ! from name field
C. Change id type to ID without !
D. Rename name field to title

Solution

  1. Step 1: Understand the error cause

    The error occurs because name is required (String!) but the query returns null, violating the non-null rule.
  2. Step 2: Fix by making name optional

    Removing ! from name allows it to be null, fixing the error.
  3. Final Answer:

    Remove ! from name field -> Option B
  4. Quick Check:

    Null returned for required field? Remove ! [OK]
Hint: If null causes error, remove ! to allow optional [OK]
Common Mistakes:
  • Adding ! to optional fields instead of removing
  • Changing unrelated fields
  • Renaming fields without fixing null issue
5. You have this GraphQL input type:
input NewUserInput {
  username: String!
  email: String!
  phone: String
}

You want to ensure phone is also required but keep it optional for some mutations. How can you design this?
hard
A. Create two input types: one with phone: String! and one with phone: String
B. Add ! to phone in the existing input type
C. Remove ! from username and email
D. Make all fields optional by removing all !

Solution

  1. Step 1: Understand requirement for conditional field requirement

    You want phone required in some cases but optional in others, so a single input type cannot express both.
  2. Step 2: Use multiple input types for flexibility

    Creating two input types--one with phone: String! and one with phone: String--lets you choose which to use per mutation.
  3. Final Answer:

    Create two input types: one with phone: String! and one with phone: String -> Option A
  4. Quick Check:

    Use multiple input types for conditional required fields [OK]
Hint: Use separate input types to toggle required fields flexibly [OK]
Common Mistakes:
  • Trying to toggle ! dynamically in one input type
  • Removing required from always required fields
  • Making all fields optional losing data integrity
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