使用 GraphQL 转换在 AWS AppSync 中生成带有参数的订阅

Posted

技术标签:

【中文标题】使用 GraphQL 转换在 AWS AppSync 中生成带有参数的订阅【英文标题】:Generate Subscription with arguments in AWS AppSync with GraphQL Transform 【发布时间】:2019-06-13 09:34:43 【问题描述】:

我目前正在使用 GraphQL 转换库来生成我的所有架构。 我有一个这样定义的模型:

type Feedback @model 
  id: ID!
  event: Event! @connection(name: "EventFeedbacks")
  submittedDate: AWSDateTime!

自动生成的订阅模式是这样的:

type Subscription 
    onCreateFeedback: Feedback
        @aws_subscribe(mutations: ["createFeedback"])

我想为订阅提供一个参数,以便我只能订阅该事件,如下所示:

type Subscription 
    onCreateFeedback(eventId: ID): Feedback
        @aws_subscribe(mutations: ["createFeedback"])

我需要做什么才能自动生成此订阅?谢谢!

【问题讨论】:

【参考方案1】:

目前不支持自定义订阅字段参数。唯一受支持的自定义是创建绑定到单个突变的多个订阅字段。

示例:

type Feedback @model(subscriptions:  onCreate: ["onCreateFeedback", "onCreateFeedbackById"] ) 
  id: ID!
  event: Event! @connection(name: "EventFeedbacks")
  submittedDate: AWSDateTime!

将为订阅类型生成:

type Subscription 
    onCreateFeedback: Feedback
        @aws_subscribe(mutations: ["createFeedback"])
    onCreateFeedbackById: Feedback
        @aws_subscribe(mutations: ["createFeedback"])

但是您必须在 onCreateFeedbackById 字段上手动添加 eventId 参数。

不过,我建议在https://github.com/aws-amplify/amplify-cli/issues 中打开功能请求

【讨论】:

【参考方案2】:

正如@Tinou 正确概述的那样,您可以使用subscriptions arg 重命名和关闭由@model 生成的订阅字段,但您还可以通过将Subscription 类型添加到您的架构来创建自定义订阅。

type Subscription 
    customField(arg: String): String @aws_subscribe(mutations:["customPublish"])

使用这种方法,您可以添加所需的任何字段和参数。

【讨论】:

在我收到诸如“未知指令@aws_subscribe”之类的错误消息之前。现在我可以在切换到 @aws-amplify/cli 的 multienv 分支后进行编译。现在可以生成带有参数的订阅,但突变后没有收到结果。我需要为订阅编写解析器吗?

以上是关于使用 GraphQL 转换在 AWS AppSync 中生成带有参数的订阅的主要内容,如果未能解决你的问题,请参考以下文章

使用 GraphQL 转换在 AWS AppSync 中生成带有参数的订阅

用户连接到另一个用户作为朋友关系 - AWS GraphQL 转换

通过 AWS AppSync GraphQL API 使用多种授权类型

我们可以在不使用 GraphQL 的情况下在项目中实施 AWS-Appsync 吗?

在 Ionic AWS Starter 模板中使用 Appsync 中的 Graphql 和 AWS Amplify 未捕获的异常 [Object Object]

如何在 aws amplify 中使用 graphQL 限制