Bird
0
0

You want to create a request mapping template that extracts userId and roles from a nested JSON request:

hard📝 Application Q8 of 15
AWS - API Gateway
You want to create a request mapping template that extracts userId and roles from a nested JSON request:
{
  "user": {
    "id": "u123",
    "details": {
      "roles": ["admin", "editor"]
    }
  }
}

Which mapping template correctly extracts userId as a string and roles as a JSON array?
A{ "userId": "$input.path('$.user.id')", "roles": $input.path('$.user.details.roles') }
B{ "userId": "$input.path('$.user.id')", "roles": "$input.path('$.user.details.roles')" }
C{ "userId": $input.path('$.user.id'), "roles": $input.path('$.user.details.roles') }
D{ "userId": "$input.json('$.user.id')", "roles": $input.json('$.user.details.roles') }
Step-by-Step Solution
Solution:
  1. Step 1: Extract userId as string

    Use quotes around $input.path for userId to get string value.
  2. Step 2: Extract roles as JSON array

    Do not quote roles extraction to keep it as JSON array, so $input.path without quotes.
  3. Step 3: Evaluate options

    {\n "userId": "$input.path('$.user.id')",\n "roles": $input.path('$.user.details.roles')\n} correctly quotes userId and leaves roles unquoted. Quoting roles makes it a stringified array. Omitting quotes for userId produces invalid JSON. $input.json is invalid syntax.
  4. Final Answer:

    {\n "userId": "$input.path('$.user.id')",\n "roles": $input.path('$.user.details.roles')\n} -> Option A
  5. Quick Check:

    Quote strings, leave JSON arrays unquoted [OK]
Quick Trick: Quote strings, leave JSON arrays unquoted in templates [OK]
Common Mistakes:
MISTAKES
  • Quoting JSON arrays turning them into strings
  • Not quoting string fields causing errors
  • Using invalid $input.json method

Want More Practice?

15+ quiz questions · All difficulty levels · Free

Free Signup - Practice All Questions
More AWS Quizzes