gpt4 book ai didi

amazon-dynamodb - 返回也具有字段解析器的 Appsync GraphQL 类型

转载 作者:行者123 更新时间:2023-12-01 12:10:21 27 4
gpt4 key购买 nike

我想从 AddImageSet 突变返回 ImageSet 类型。但我似乎无法做到这一点,因为我的 ImageSet 类型上的每个字段都有自己的解析器,它会覆盖解析器映射模板。

架构:

type ImageSet {
SetKey: ID
SetName: String
SetCreatedAt: AWSTimestamp
SetDescription: String
SetTags: [Tag]
}

type Mutation {
AddImageSet(setName: String!, setDescription: String): ImageSet
}

这是突变:
{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
"PartitionKey" : { "S" : "ImageSet" },
"SortKey" : { "S" : "ImageSet-$util.autoId()" }
},
"attributeValues" : {
"Name": { "S" : "${context.arguments.setName}" },
"Description": { "S" : "${context.arguments.setDescription}" },
"CreatedAt": { "N" : $util.time.nowEpochSeconds() },
}
}

和响应映射模板
{
"SetKey" : "$context.result.SortKey",
"SetName" : "$context.result.Name",
"SetCreatedAt" : $context.result.CreatedAt,
"SetDescription" : "$context.result.Description"
}

当我运行它时,AddImageSet 突变返回的对象将每个字段都设置为空,因为字段解析器正在覆盖 AddImageSet 突变的响应映射模板。

我通过创建重复的“ImageSetResult”类型解决了这个问题,只是没有附加到该字段的解析器。然后如果 AddImageSet Mutation 返回那个,一切都很好。但这些似乎有点多余。

有一个更好的方法吗?

最佳答案

这是 GraphQL 中的预期行为。如果您在 上有解析器ImageSet.SetKey 和您的 Mutation.AddImageSet 突变返回类型为 的对象图像集 ,将调用选择集中列出的每个字段的解析器。 返回的值Mutation.AddImageSet 将被子解析器返回的任何值覆盖。

要添加更多上下文,您从 返回的值Mutation.AddImageSet 响应映射模板将为 的值$ctx.source 当您在 ImageSet.SetKey/SetName/SetCreatedAt 解析器。从这些解析器中,您可以执行以下操作:

#if( $ctx.source.SetKey ) "$ctx.source.SetKey" #else .. whatever SetKey does .. #end

是否有理由需要 SetKey/SetName/etc 上的解析器?如果对象已经被 返回Mutation.AddImageSet Query.AddImageSet 等等,那么您不需要该类型的解析器。

另一个注意事项。你有什么理由想要这些名字 ImageSet.SetName 而不仅仅是 图像集.名称 您是如何将它存储在 DynamoDB 中的?这似乎增加了很多复杂性,您可能可以避免它。

关于amazon-dynamodb - 返回也具有字段解析器的 Appsync GraphQL 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52083207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com