Appsyncでsubscription使ったときにハマったので共有します。
例えば下記のsubscription定義があるとします。
type Subscription {
subscribeToNewMessage(conversationId: ID!): Message
@aws_subscribe(mutations: ["createMessage"])
}
"createMessage" Mutationが実行された、かつ、conversationIdがある値のときにsubscribeしたいって定義です。
これがNuxt.jsで作ったクライアントから上手く動かなかったのですが、クライアントから実行するMutationの書き方に問題がありました。
動かなかったときのMutationは次です。
const createMessage = /* GraphQL */ `
mutation createMessage(
$id: ID!
$content: String
$conversationId: ID!
$s3Key: String
) {
createMessage(
content: $content
conversationId: $conversationId
id: $id
s3Key: $s3Key
) {
id
content
sender
}
}
`;
次に動いたときのMutationはコレです。
const createMessage = /* GraphQL */ `
mutation createMessage(
$id: ID!
$content: String
$conversationId: ID!
$s3Key: String
) {
createMessage(
content: $content
conversationId: $conversationId
id: $id
s3Key: $s3Key
) {
id
conversationId ←ここ
content
sender
}
}
`;
subscriptionの引数に定義したconversationIdを戻り値に指定したら動きました。
どうやら、mutationの引数ではなく、戻り値を見て発火しているみたいです。