提问人:Tristan Müller 提问时间:11/16/2023 最后编辑:Tristan Müller 更新时间:11/16/2023 访问量:27
AWS AppSync 订阅以对象为输入的 Mutation 困难
AWS AppSync Subscription to Mutation with object as input struggle
问:
我想创建一个 EventBridge 规则,该规则应通过 Appsync 触发 GraphQL 订阅。一切正常,直到我从对象变为字符串。Service
我的 GraphQL 模式如下所示:
input nestedObjectInput {
A: String
B: String
}
type simpleReturn {
Name: String
Service: nestedObject
}
type Mutation {
simpleMut(Name: String, Service: nestedObjectInput!): simpleReturn
}
type Subscription {
onSimpleMut: simpleReturn
@aws_subscribe(mutations: ["simpleMut"])
}
在 Appsync 服务中,我的订阅可以使用以下 Mutation 语法:
mutation MyMutation {
simpleMut(Service: {A: "aaa", B: "bbb"}, Name: "123") {
IMSI
Service {
A
B
}
}
}
现在有趣的部分开始了......我希望通过 EventBridge 规则触发此突变。所以我需要配置一个输入变压器。
我的目标输入转换器如下所示:
{
"A": "$.detail.Service.A",
"B": "$.detail.Service.B",
"Name": "$.detail.Name",
"Service": "$.detail.Service"
}
我的任何输入模板都如下所示:
{
"query": "mutation SimpleMut($Name: String, $Service: {$A: String, $B: String}) { simpleMut(Name:$Name, Service: {A: $A, B: $B}) { Name Service{A B}}}",
"operationName": "SimpleMut",
"variables": {
"Name": "<Name>",
"Service": "<Service>",
"A": "<A>",
"B": "<B>"
}
}
如果我运行此示例事件:
{
"metaData": "secretStuff",
"detail": {
"Name": "123",
"Service": {
"A": "aaa",
"B": "bbb"
}
}
}
并获得这个看起来很有前途的输出:
{
"query": "mutation SimpleMut($Name: String, $Service: {$A: String, $B: String}) { simpleMut(Name: $Name, Service: {A: $A, B: $B}) { Name Service{A B}}}",
"operationName": "SimpleMut",
"variables": {
"Name": "123",
"Service": "[object Object]",
"A": "aaa",
"B": "bbb"
}
}
但是我的 GraphlQL 订阅没有收到任何信息。我已将 lambda 与我以预期格式接收事件的终端节点并行放置。API 目标不会成为问题,因为如果是一个简单的字符串,它就会正常工作。Service
有什么建议吗??
或者我该如何调试它,因为我没有收到任何错误消息来了解出了什么问题
编辑 1:格式,附加 Q
答:
1赞
YourFriend
11/29/2023
#1
由于 “nestedObjectInput” 在 mutation 中是必需的,而 “Service” 是 “nestedObjectInput” 类型的变量,因此下面可以是您的“输入模板”。
{
"query":"mutation SimpleMut($Name: String, $Service: nestedObjectInput! ) { simpleMut(Name:$Name, Service: $Service) { Name Service {A B}}}",
"operationName":"SimpleMut",
"variables":{
"Name":"<Name>",
"Service":{
"A":"<A>",
"B":"<B>"
}
}
}
此输入模板会将传入负载转换为 AppSync API 中所需的格式。我尝试使用此输入模板重现解决方案,并在下面提供事件 -
{
"metaData": "secretStuff",
"detail": {
"Name": "123",
"Service": {
"A": "aaa",
"B": "bbb"
}
}
}
我在 GraphQL 订阅中得到了以下结果 -
{
"data": {
"onSimpleMut": {
"IMSI": "123",
"Service": {
"A": "aaa",
"B": "bbb"
}
}
}
}
我希望这就是你要找的。祝您编码愉快。
评论