【问题标题】:How to pass default GraphQL arguments to AWS AppSync resolver如何将默认 GraphQL 参数传递给 AWS AppSync 解析器
【发布时间】:2018-12-20 11:56:04
【问题描述】:

AWS AppSync 允许在这样的架构中定义 default values

type Foo {
  bar(
    arg: Int = 20
  ): Bar!
}

或者那个

type Foo {
  bar(
    arg: Int! = 20
  ): Bar!
}

但无论哪种方式,当值没有明确定义时,默认值都不会传递给解析器。

我应该选择加入来激活要传递的默认值吗?这是一个 AWS 错误吗?如果是这样,是否有解决方法?

PS:在GraphQL specs

如果没有为定义的输入对象字段提供值,并且该字段定义提供了默认值,则应使用默认值。如果未提供默认值且输入对象字段的类型为非空,则应抛出错误。否则,如果该字段不是必需的,则不会向强制无序映射添加任何条目。

【问题讨论】:

标签: amazon-web-services graphql aws-appsync


【解决方案1】:

默认参数目前是一个已知问题,解决它们的最佳方法是使用$util.defaultIfNull()velocity helper 函数。例如,您可以为 limit 和 next 令牌执行默认参数,如下所示:

{
  "version": "2017-02-28",
  "operation": "Scan",
  "limit": $util.defaultIfNull($ctx.args.first, 20),
  "nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.after, null)),
}

【讨论】:

  • 是的,我已经在解析器级别使用默认值(使用 Lambda 而不是速度模板)。但我对此并不满意,因为我直接在架构arg: Int = 20 中设置默认值,并且我不想在架构和解析器中都进行冗余定义。我希望直接在 AppSync 中设置和管理默认值。而不是在解析器中
  • 你是对的。这是一个已知问题,将在未来修复。
  • @mparis 对此有何更新,因为它似乎仍未按规范预期工作?
  • 问题:如果限制作为 graphQL 参数传递,那么如何阻止 API 使用者请求限制为“1000000”的数据?这不是违背了 API 分页的目的吗?
  • 如果您再等 6 年,有传言称 AppSync 团队会解决这个问题。
猜你喜欢
  • 2019-03-01
  • 2021-01-07
  • 2017-02-05
  • 2016-01-07
  • 2018-10-11
  • 2022-07-20
  • 2021-03-21
  • 2018-09-21
  • 1970-01-01
相关资源
最近更新 更多