Bird
Raised Fist0
GraphQLquery~20 mins

Field-level cost analysis in GraphQL - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Field-level Cost Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
query_result
intermediate
2:00remaining
Calculate total cost for selected fields

Given a GraphQL query requesting name and price fields of products, and a cost model where name costs 1 unit and price costs 3 units per item, what is the total cost for 5 products?

GraphQL
query {
  products {
    name
    price
  }
}
A20
B15
C10
D25
Attempts:
2 left
💡 Hint

Multiply the cost per field by the number of products and sum.

🧠 Conceptual
intermediate
2:00remaining
Understanding cost impact of nested fields

In a GraphQL query, a user has a nested posts field. If user fields cost 2 units each and posts fields cost 1 unit each, which factor most increases total cost?

AIncreasing number of users queried
BIncreasing number of <code>user</code> fields requested
CIncreasing number of posts per user
DIncreasing number of <code>posts</code> fields requested
Attempts:
2 left
💡 Hint

Think about how nested lists multiply cost.

📝 Syntax
advanced
2:00remaining
Identify syntax error in cost directive usage

Which option contains a syntax error in applying a cost directive to a GraphQL field?

GraphQL
type Query {
  products: [Product] @cost(multipliers: ["first"])
}

type Product {
  name: String @cost(value: 1)
  price: Float @cost(value: 2)
}
AUsing @cost(value=1) on <code>price</code> field
BUsing @cost(multipliers: ["first"]) on <code>products</code> field
CUsing @cost(value: 1) on <code>name</code> field
DUsing @cost(value: 2) on <code>price</code> field
Attempts:
2 left
💡 Hint

Check the syntax for directive arguments in GraphQL.

optimization
advanced
2:00remaining
Optimize query cost by reducing field requests

You have a query requesting id, name, description, and price fields for 10 products. Costs per field are: id = 1, name = 2, description = 5, price = 3. Which option reduces total cost the most while keeping id and price?

ARemove <code>name</code> only
BRemove <code>name</code> and <code>description</code>
CRemove <code>price</code> only
DRemove <code>description</code> only
Attempts:
2 left
💡 Hint

Calculate cost savings for each removal.

🔧 Debug
expert
3:00remaining
Diagnose unexpected high cost in nested query

A query requests users with nested posts and comments. Each user has 3 posts, each post has 4 comments. Costs: user fields = 2 units each, post fields = 1 unit each, comment fields = 0.5 units each. The query requests 2 fields per user, 3 fields per post, and 2 fields per comment. Why is the total cost unexpectedly high?

AThe query requests too many user fields
BThe number of users queried is higher than expected
CThe cost per comment field is set too low
DThe cost calculation multiplies fields by number of comments incorrectly
Attempts:
2 left
💡 Hint

Consider how nested lists multiply total cost.

Practice

(1/5)
1. What is the main purpose of using the @cost directive in GraphQL field-level cost analysis?
easy
A. To rename a field in the schema
B. To define the data type of a field
C. To specify the default value of a field
D. To assign a numeric cost to each field to track resource usage

Solution

  1. Step 1: Understand the purpose of field-level cost analysis

    Field-level cost analysis helps monitor and limit resource use by assigning costs to fields.
  2. Step 2: Identify the role of the @cost directive

    The @cost directive assigns a numeric complexity cost to each field to estimate query cost.
  3. Final Answer:

    To assign a numeric cost to each field to track resource usage -> Option D
  4. Quick Check:

    @cost assigns cost = A [OK]
Hint: Remember: @cost tracks resource use per field [OK]
Common Mistakes:
  • Confusing cost with data type definition
  • Thinking @cost renames fields
  • Assuming it sets default values
2. Which of the following is the correct syntax to add a cost directive with complexity 5 to a GraphQL field named books?
easy
A. books: [Book] @cost(complexity: 5)
B. books: [Book] @cost(5)
C. books: [Book] @cost(complexity=5)
D. books: [Book] @cost { complexity: 5 }

Solution

  1. Step 1: Recall the correct directive syntax

    The @cost directive uses parentheses with named arguments, e.g., @cost(complexity: 5).
  2. Step 2: Check each option's syntax

    books: [Book] @cost(complexity: 5) uses correct syntax with named argument and colon. The other three options use incorrect syntax forms.
  3. Final Answer:

    books: [Book] @cost(complexity: 5) -> Option A
  4. Quick Check:

    Correct directive syntax = B [OK]
Hint: Use parentheses and colon for directive args: @cost(complexity: 5) [OK]
Common Mistakes:
  • Using equal sign instead of colon
  • Omitting parentheses
  • Using braces instead of parentheses
3. Given the schema snippet:
type Query {
  users: [User] @cost(complexity: 2, multipliers: ["first"])
}

input UserFilter {
  first: Int
}

And the query:
{ users(first: 3) { id name } }

What is the total cost of this query assuming id and name fields have cost 1 each?
medium
A. 3
B. 6
C. 8
D. 5

Solution

  1. Step 1: Calculate base complexity and multipliers

    Base complexity is 2. The multiplier is the argument "first" with value 3, so multiply 2 * 3 = 6.
  2. Step 2: Add cost of requested fields

    Fields id and name each cost 1, total 2. Add to 6 gives 8.
  3. Final Answer:

    8 -> Option C
  4. Quick Check:

    2 * 3 + 1 + 1 = 8 [OK]
Hint: Multiply complexity by argument, then add field costs [OK]
Common Mistakes:
  • Ignoring multipliers
  • Not adding field costs
  • Multiplying fields cost instead of adding
4. Consider this incorrect directive usage:
type Query {
  posts: [Post] @cost(complexity: "high")
}

What is the main error here?
medium
A. The complexity value must be an integer, not a string
B. The field name posts is invalid
C. The directive @cost cannot be used on lists
D. The directive syntax is missing parentheses

Solution

  1. Step 1: Check the type of complexity argument

    The complexity argument expects an integer value, but "high" is a string.
  2. Step 2: Verify other parts of the directive usage

    The field name and directive usage are valid; parentheses are present.
  3. Final Answer:

    The complexity value must be an integer, not a string -> Option A
  4. Quick Check:

    Complexity expects integer = D [OK]
Hint: Complexity must be a number, not text [OK]
Common Mistakes:
  • Using string instead of integer for complexity
  • Thinking directive can't be on lists
  • Missing parentheses in directive
5. You have a GraphQL field comments with @cost(complexity: 1, multipliers: ["limit"]). The query requests comments(limit: 4) with subfields text and author, each costing 2. What is the total cost of this query?
hard
A. 12
B. 8
C. 10
D. 6

Solution

  1. Step 1: Calculate base complexity with multiplier

    Base complexity is 1. Multiplier is argument "limit" with value 4, so 1 * 4 = 4.
  2. Step 2: Add cost of subfields

    Subfields text and author each cost 2, total 4. Add to 4 gives 8.
  3. Step 3: Verify the total

    Subfields are added flatly without further multiplication by list size: 4 (base) + 4 (subfields) = 8.
  4. Final Answer:

    8 -> Option B
  5. Quick Check:

    1*4 + (2+2) = 8 [OK]
Hint: Add base cost times multiplier plus subfields cost [OK]
Common Mistakes:
  • Multiplying subfields cost by multiplier (e.g., getting 20)
  • Adding costs without multiplier
  • Confusing which costs to multiply