When we request a GraphQL query, for instance,
query GetPost {
singlePost(id: 123) {
id
title
}
}
and we have configured a Lambda resolver in AWS AppSync, the request mapping template,
{
"version": "2017-02-28",
"operation": "Invoke",
"payload": {
"resolve": "singlePost",
"query": $utils.toJson($context.arguments)
}
}
allows us to define the event object passed to the lambda handler.
For the above example, our Lambda handler would be invoked with an event event
wherein event.payload.query.id == 123
or the like.
According to the docs the $context
object comprises,
{
"arguments" : { ... },
"source" : { ... },
"result" : { ... },
"identity" : { ... },
"request" : { ... }
}
That said, the documentation does not mention where I can access the requested fields of the GraphQL query.
For the former example, these fields would correspond to ["id", "title"]
.
In the case that I need to resolve some nested properties, e.g. a tags array, of an object through an expensive operation, e.g. a SQL join, it would be beneficial if I could check if this nested property is actually requested.
This question relates to How to get requested fields inside GraphQL resolver?, however, it differs from in the GraphQL implementation graphql-tools
vs AppSync.