やりたいこと
query {
user(id: "Makutamoto") {
id
posts {
userID
id
}
}
}
このような、ネストされたクエリを実行したいとします。
言い換えると、userフィールドの引数であるidをpostsのresolverでも受け取とりたいということです。
解決策
Response Mapping Templateの$context.sourceに親フィールドのレスポンスが格納されているので、それを使います。
実行結果
{
"data": {
"user": {
"id": "Makutamoto",
"posts": [
{
"userID": "Makutamoto",
"id": "id-1"
},
{
"userID": "Makutamoto",
"id": "id-2"
}
]
}
}
}
ソース
簡略化のため、データソースはすべてNoneタイプのものを指定しています。
スキーマ
type Post {
userID: String!
id: String!
}
type Query {
user(id: ID!): User
}
type User {
id: String!
posts: [Post]!
}
userフィールドのリゾルバ
Request Mapping Template
{
"version": "2017-02-28",
"payload": {
}
}
Response Mapping Template
$util.toJson($context.arguments)
postsフィールドのリゾルバ
Request Mapping Template
{
"version": "2017-02-28",
"payload": {
}
}
Response$nbsp;Mapping Template
$util.toJson([{"userID": $context.source.id, "id": "id-1"}, {"userID": $context.source.id, "id": "id-2"}])