我使用AWS Amplify创建了GraphQL API。在DynamoDB中,将自动创建字段createdAt,updatedAt和owner。开箱即用,我无法获取该字段的值。现在,当我将这些字段添加到带注释的架构中时,我将能够获取这些值,但是具有写权限的每个人都可以覆盖它们,这对于时间字段和所有者字段来说是很烦人的。
那我怎么得到那些值?
这是一个AWS-Amplify特定问题。与通用GraphQL无关。
特别是关于如何使用AWS-Amplify的API模块及其(非常有限的)指令(https://aws-amplify.github.io/docs/js/api#using-graphql-transformers)来执行此操作。答案 0 :(得分:0)
要获取此数据,您必须在模式中具有某种对应的类型和查询。
我知道您提到出于安全风险之类的原因,您不希望将它们包含在Schema中,但是实际上,您对任何可访问该API的人都可以在您的schema中使用任何可用字段进行编辑。
我的建议是让您的项目开发人员使用Amplify CLI提供的新的多环境支持来使用新环境,以便拥有一个单独的API,该API在生产中不会公开,以防止破坏您的更改的问题主模式。
答案 1 :(得分:0)
您应该像这样覆盖创建解析器:
代替:
## [Start] Prepare DynamoDB PutItem Request. **
$util.qr($context.args.input.put("createdAt", $util.defaultIfNull($ctx.args.input.createdAt, $util.time.nowISO8601())))
$util.qr($context.args.input.put("updatedAt", $util.defaultIfNull($ctx.args.input.updatedAt, $util.time.nowISO8601())))
您应该:
## [Start] Prepare DynamoDB PutItem Request. **
$util.qr($context.args.input.put("createdAt", $util.time.nowISO8601()))
$util.qr($context.args.input.put("updatedAt", $util.time.nowISO8601()))
在更新解析器中
代替:
## Automatically set the updatedAt timestamp. **
$util.qr($context.args.input.put("updatedAt", $util.defaultIfNull($ctx.args.input.updatedAt, $util.time.nowISO8601())))
您应该:
## Automatically set the updatedAt timestamp. **
$util.qr($context.args.input.put("updatedAt", $util.time.nowISO8601()))
aws-amplify-overriding-auto-generated
P.S。将新的解析器放置在/ resolvers文件夹中。不在/ build / resolvers
中答案 2 :(得分:-1)