Bird
Raised Fist0
GraphQLquery~5 mins

Subscription resolvers in GraphQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a subscription resolver in GraphQL?
A subscription resolver is a special function in GraphQL that listens for real-time events and sends updates to clients when data changes.
Click to reveal answer
beginner
How does a subscription resolver differ from a query resolver?
A query resolver fetches data once when requested, while a subscription resolver keeps a connection open to send data updates continuously.
Click to reveal answer
intermediate
What role does PubSub play in subscription resolvers?
PubSub is a system that helps subscription resolvers by publishing events and allowing clients to subscribe to those events for real-time updates.
Click to reveal answer
intermediate
Why do subscription resolvers use WebSockets?
WebSockets keep a live connection between client and server, enabling subscription resolvers to push data instantly without repeated requests.
Click to reveal answer
advanced
What is the typical structure of a subscription resolver function?
It usually has a subscribe method that returns an AsyncIterator to listen for events, and optionally a resolve method to process the event data before sending.
Click to reveal answer
What does a subscription resolver primarily do?
AListens for real-time data changes and sends updates
BFetches data once on request
CDeletes data from the database
DUpdates data in the database
Which protocol is commonly used to maintain live connections for subscriptions?
AWebSocket
BFTP
CHTTP
DSMTP
In GraphQL subscriptions, what does PubSub help with?
AQuery optimization
BSchema validation
CPublishing and subscribing to events
DAuthentication
What does the subscribe method in a subscription resolver return?
AA Promise
BAn AsyncIterator
CA Boolean
DA String
Which of these is NOT a feature of subscription resolvers?
AEvent listening
BContinuous data updates
CReal-time communication
DSingle data fetch
Explain how subscription resolvers work in GraphQL and why they are useful.
Think about how apps get live data like chat messages or notifications.
You got /5 concepts.
    Describe the difference between query resolvers and subscription resolvers in GraphQL.
    Compare a snapshot photo to a live video stream.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a subscription resolver in GraphQL?
      easy
      A. To modify data on the server
      B. To fetch data only once when a query is made
      C. To provide real-time updates to clients when data changes
      D. To define the schema types

      Solution

      1. Step 1: Understand the role of subscription resolvers

        Subscription resolvers are designed to send data updates automatically as events happen, unlike queries which fetch data once.
      2. Step 2: Compare with other resolver types

        Queries fetch data once, mutations modify data, and schema defines types. Only subscriptions provide live updates.
      3. Final Answer:

        To provide real-time updates to clients when data changes -> Option C
      4. Quick Check:

        Subscription = real-time updates [OK]
      Hint: Subscriptions push live data updates automatically [OK]
      Common Mistakes:
      • Confusing subscriptions with queries
      • Thinking subscriptions modify data
      • Mixing schema definition with resolver purpose
      2. Which of the following is the correct way to declare a subscription resolver in GraphQL SDL?
      easy
      A. type Subscription { newMessage: Message }
      B. type Query { newMessage: Message }
      C. type Mutation { newMessage: Message }
      D. type Resolver { newMessage: Message }

      Solution

      1. Step 1: Identify the correct GraphQL operation keyword

        Subscriptions use the type Subscription keyword to declare real-time data streams in the schema.
      2. Step 2: Check other operation keywords

        Queries use type Query, mutations use type Mutation, and type Resolver is not a valid keyword.
      3. Final Answer:

        type Subscription { newMessage: Message } -> Option A
      4. Quick Check:

        Subscription keyword = subscription declaration [OK]
      Hint: Use 'type Subscription' keyword to declare live data streams [OK]
      Common Mistakes:
      • Using 'type Query' or 'type Mutation' instead of 'type Subscription'
      • Trying to use 'type Resolver' keyword
      • Misplacing subscription declaration outside schema
      3. Given this subscription resolver code snippet, what will be the output when a new message is published?
      const resolvers = {
        Subscription: {
          newMessage: {
            subscribe: () => pubsub.asyncIterator(['MESSAGE_ADDED'])
          }
        }
      };
      medium
      A. The client receives updates only when a message is added
      B. The client receives all past messages immediately
      C. The client receives no updates until a query is made
      D. The client receives an error because subscribe is missing

      Solution

      1. Step 1: Understand the subscribe function

        The subscribe function returns an async iterator for the event 'MESSAGE_ADDED', so it listens for new messages.
      2. Step 2: Determine what triggers updates

        Updates are sent only when the 'MESSAGE_ADDED' event occurs, so clients get notified only on new messages.
      3. Final Answer:

        The client receives updates only when a message is added -> Option A
      4. Quick Check:

        Subscription triggers on event = client updates [OK]
      Hint: Subscribe returns async iterator for live event updates [OK]
      Common Mistakes:
      • Assuming all past data is sent immediately
      • Thinking updates require queries first
      • Missing that subscribe returns async iterator
      4. Identify the error in this subscription resolver code:
      const resolvers = {
        Subscription: {
          newNotification: {
            subscribe: pubsub.asyncIterator('NOTIFICATION_ADDED')
          }
        }
      };
      medium
      A. The resolver key should be 'Query' instead of 'Subscription'
      B. The event name should be an array, not a string
      C. Subscription resolvers cannot use pubsub
      D. The subscribe function should be a function returning asyncIterator, not the asyncIterator itself

      Solution

      1. Step 1: Check the subscribe property type

        The subscribe property must be a function that returns the async iterator, not the async iterator itself.
      2. Step 2: Verify correct usage of asyncIterator

        It should be subscribe: () => pubsub.asyncIterator('NOTIFICATION_ADDED') to work properly.
      3. Final Answer:

        The subscribe function should be a function returning asyncIterator, not the asyncIterator itself -> Option D
      4. Quick Check:

        Subscribe must be a function returning asyncIterator [OK]
      Hint: Subscribe must be a function returning asyncIterator [OK]
      Common Mistakes:
      • Assigning asyncIterator directly instead of a function
      • Using string instead of array for event names (optional)
      • Confusing subscription with query resolvers
      5. You want to create a subscription that only sends updates to clients when a new comment is added to a specific post ID. Which resolver implementation correctly filters events by post ID?
      const resolvers = {
        Subscription: {
          commentAdded: {
            subscribe: (parent, args, { pubsub }) => {
              return pubsub.asyncIterator('COMMENT_ADDED');
            },
            resolve: (payload, args) => {
              if (payload.postId === args.postId) {
                return payload;
              }
              return null;
            }
          }
        }
      };
      hard
      A. The filtering should be done inside the subscribe function, not resolve
      B. This implementation correctly filters comments by postId in the resolve function
      C. The asyncIterator should listen to an array of post IDs, not a single event
      D. Subscriptions cannot filter events by arguments

      Solution

      1. Step 1: Understand event filtering in subscriptions

        The resolve function can filter events by checking if the payload matches the subscription arguments.
      2. Step 2: Check the given code logic

        The code returns the payload only if payload.postId === args.postId, otherwise returns null to skip irrelevant events.
      3. Final Answer:

        This implementation correctly filters comments by postId in the resolve function -> Option B
      4. Quick Check:

        Filtering in resolve function = correct approach [OK]
      Hint: Filter events in resolve by comparing payload and args [OK]
      Common Mistakes:
      • Trying to filter inside subscribe instead of resolve
      • Expecting asyncIterator to filter by arguments automatically
      • Believing subscriptions cannot filter events
      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