【问题标题】:AWS AppSync Subscription ArgumentsAWS AppSync 订阅参数
【发布时间】:2018-09-30 09:49:52
【问题描述】:

AppSync GraphQL 订阅上的参数可以用来做什么?根据文档上的real-time data 页面:

使用 GraphQL 订阅的一个重要部分是了解何时以及如何使用参数,因为细微的变化将允许您修改通知客户端发生突变的方式和时间。 (...) 在默认示例中,客户端可以在传递特定 eventId 参数时订阅 Comments

不过,我找不到任何访问订阅参数的方法。我有不同的 cmets '频道',我希望用户能够单独订阅,可选择使用密码。我设置的订阅改为响应所有频道中的 cmets。

是否有任何方法可以使用映射模板或类似模板“过滤”来自订阅的数据?如果不是,订阅参数的预期用途是什么?过滤必须在客户端完成吗?

【问题讨论】:

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


    【解决方案1】:

    参数的名称应与触发事件的突变响应中的字段名称相同。如果您的突变返回一个包含字段“title”的“Post”类型的值,那么将名为“title”的参数传递给订阅该突变的订阅将只获得传递给订阅的“title”等于的推送值变异返回的名为“title”的字段的值。

    【讨论】:

    • 在 AppSync 中,您能否订阅数据库中不是由突变触发而是通过 DynamoDB GUI 对数据库的更改触发的更改?
    • 您可以通过添加涉及 lambda 函数的 DynamoDB 流来实现此目的。在 appsync 中,您可以创建一个使用本地解析器(没有数据源的解析器)的突变字段,然后从 lambda 函数调用该突变字段。然后,您可以订阅该突变并在 DynamoDB 中发生任何更改时获取更新。
    【解决方案2】:

    参数控制客户端将从哪些数据中获取订阅通知。例如,如果您通过使用 bang (!) 符号所需的模式输入参数,则客户端只能订阅该参数的特定突变数据。

    GraphQL 参数,包括订阅中传递的参数,应该可以通过解析器中的$ctx.args 获得(这是$context.arguments 的简写)。例如,如果您有 getThing(name:"XYZ") 的查询,那么您可以在解析器中使用 $ctx.args.name 进行访问。

    对于您的用例,我建议在订阅中使用参数和解析器,以便用户只能通过该参数订阅频道,前提是他们符合某些授权条件,例如密码或查看登录用户.你可以在这里找到一个例子:https://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html#real-time-data

    【讨论】:

    • 感谢您提供的有用示例。我仍然不明白传递给订阅的参数如何影响从突变收到的通知。我看到了如何使用订阅参数来执行授权检查,但我没有看到订阅中的参数“toUser”如何用于阻止来自其他用户的通知。
    • 将参数添加到我的订阅后,我看到我收到了正确的突变通知。这似乎可以按我的意愿工作,但是我仍然不知道这些论点如何限制接收到的突变。是否基于参数名称?
    • 是的,它是订阅定义和参数名称/组合的组合
    猜你喜欢
    • 2019-06-15
    • 2019-01-07
    • 2020-12-28
    • 2019-09-16
    • 2019-12-27
    • 2019-05-23
    • 1970-01-01
    • 2019-01-10
    • 2018-10-06
    相关资源
    最近更新 更多