是否可以在突变输出处将预订参数映射到数组?

时间:2020-10-18 08:34:13

标签: graphql aws-appsync

我有一个理论上的问题。据我所知,订阅参数必须在突变的返回类型中作为字段存在。这意味着参数的类型还必须与突变的返回对象中的字段的类型匹配。我对吗?假设我在突变响应中得到一个带有通道ID的数组。我只发送一个频道ID作为订阅中的参数。是否可以在突变输出处将预订参数映射到数组?如果通道ID存在于数组中(字段channelsIds),则订阅必须有效。可以在方案本身中编写此逻辑,还是在技术上不可能?

GraphQL模式:

schema {
    mutation: Mutation
    subscription: Subscription
}

type Mutation {
    testMutation(input: TestMutationInput): TestMutationOutput
}

type TestMutationOutput {
    channelsIds: [String!]!
    userId: String!
    userEmail: String
    userPhoneNumber: String
}

type Subscription {
    watchTestMutation(channelId: String!): TestMutationOutput
        @aws_subscribe(mutations: ["testMutation"])
}

2 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,则希望根据突变的返回值是否在作为参数传递给订阅的数组中进行过滤。抱歉,目前无法执行此操作。订阅过滤器只能计算为真或假,不能容纳除此以外的任何逻辑。

答案 1 :(得分:0)

2020年10月底,我联系了AWS支持以寻求有关此问题的建议。我认为此答案可能对某人有用,所以我发布了他们的答案。

请允许我通知您,您拥有用例 目前无法通过AppSync提及该案例。一世 请注意,缺少该功能可能会造成不便。 AppSync团队已经有一个内部功能请求,用于 整合了此功能,我已代表您添加了+1。它是 值得注意的是,一旦此功能请求与团队一起,它将 是否/何时使用此潜在基础架构功能取决于团队 已实施,并且由于对 内部开发流程的进度,我将无法提供 有关其发布的预计到达时间。我请你留意 新功能页面或AWS Blogs作为所有新功能请求以及 增强功能已发布在此处[1-3]。

但是,在这种情况下,我们可以建议一些解决方法:

  1. 从AppSync接收客户端上的值后,过滤客户端本身上的必填字段。

  2. 如果要过滤的值非常有限,我们可以使用在映射到“无”数据的解析器的帮助下进行的假突变 资源。在此流程中,我们将创建一个使用 DynamoDB流作为触发器。 Lambda函数被触发 只要有DynamoDB表的更新。
    然后,我们可以在Lambda函数中包含逻辑以过滤 必填字段,并对AppSync进行更改。在AppSync中, 由lambda调用的突变将使用解析器进行配置 映射到“无”数据源。无数据源类型通过 将请求映射模板直接添加到响应映射模板。 当我们订阅此突变时,我们将直接获得 从Lambda筛选出的数据用于调用此突变。请 有关此过程的逐步说明,请参考[4]。

但是请注意,此解决方法比较麻烦,并且如果所需字段值不断变化,则需要进行很多更改。解决方法1(在客户端进行处理)通常是处理此用例的首选方法。

资源:

[1] https://blogs.amazon.com/

[2] https://aws.amazon.com/new/

[3] https://aws.amazon.com/releasenotes/

[4] https://aws.amazon.com/premiumsupport/knowledge-center/appsync-notify-subscribers-real-time/