AWS AppSync GraphQL输入验证-忽略额外字段?

AWS AppSync GraphQL输入验证-忽略额外字段?,graphql,aws-appsync,Graphql,Aws Appsync,我的模式中有一个input类型,它指定了许多属性,正如它打算做的那样。问题是,我要发送给将这些对象持久化的变异的对象是一个具有可能更改的任意字段的对象。目前,如果发送架构中未指定的属性,则会出现以下错误: Validation error of type WrongType: argument 'input' with value (...) contains a field not in 'BotInput': 'ext_gps' @ 'setBot' 具体地说,我的inputtype

我的模式中有一个
input
类型,它指定了许多属性,正如它打算做的那样。问题是,我要发送给将这些对象持久化的变异的对象是一个具有可能更改的任意字段的对象。目前,如果发送架构中未指定的属性,则会出现以下错误:

Validation error of type WrongType: argument 'input' with value (...)
   contains a field not in 'BotInput': 'ext_gps' @ 'setBot'
具体地说,我的
input
type没有指定属性
exp\u gps
,而是提供了该字段

我的问题
有没有一种方法可以使输入验证忽略模式中没有的任何属性,从而只使用模式中指定的内容继续执行变异?通常情况下,我不想保留其他属性,因此只要添加了其他属性,就可以删除它们。

GraphQL不支持任意字段,存在一个,但尚未合并/批准到规范中

我看到了两种可能的解决方法,它们都需要稍微更改您的模式

假设您具有以下模式:

型突变{
saveBot(输入:BotInput):布尔值
}
输入BotInput{
id:id!
标题:字符串
}
输入对象为:

{
“id”:“123”,
“标题”:“谷歌机器人”,
“无关”:“字段”,
“外部gps”:“其他”
}
选项1:将任意字段作为 您可以将架构更改为:

型突变{
saveBot(输入:BotInput):布尔值
}
输入BotInput{
id:id!
标题:字符串
ArricryFields:AWSJSON//这将包含json字符串中的所有任意字段,前提是您的客户机可以从原始对象中提取这些字段,将其映射并将其json序列化。
}
因此,我们示例中的输入现在是:

{
“id”:“123”,
“标题”:“谷歌机器人”,
“arbitraryFields:“{\'unrelated\':\'field\',\'ext\u gps\':\'else\'”
}
在解析器中,您可以获取
arbitraryFields
字符串,对其进行反序列化,并在将
BotInput
对象的值传递到数据源之前对其进行水合物化

选项2:将输入作为
AWSJSON
原理是相同的,但您将整个
BotInput
作为
AWSJSON
传递

型突变{
saveBot(输入:AWSJSON):布尔值
}
您不必执行解析程序,也不必更改客户端,但会丢失GraphQL类型验证,因为整个
BotInput
现在是一个blob