【问题标题】:AWS-Amplify API module: how to make GraphQL fields unique?AWS-Amplify API 模块:如何使 GraphQL 字段独一无二?
【发布时间】:2019-05-30 22:36:25
【问题描述】:

AWS-Amplify 提供了几个指令来构建 GraphQL-API。但是我还没有弄清楚如何确保字段的唯一性。

我想在 GraphCool 中做一些类似的事情:

type Tag @model @searchable {
  id: ID!
  label: String! @isUnique
}

这是一个特定于 AWS-Amplify 的问题。这不是关于如何使用通用 GraphQL 来做到这一点。它非常具体地介绍了如何使用 AWS-Amplify 的 API 模块来做到这一点。 (https://aws-amplify.github.io/docs/js/api)

【问题讨论】:

    标签: graphql aws-appsync aws-amplify


    【解决方案1】:

    您好,谢谢您的提问。默认情况下,使用 amplify-cli 尚无法做到这一点,但您可以自己使用管道解析器和 DynamoDB 表上的额外索引来执行此操作。执行此操作的步骤如下:

    1. 在标签为 HASH KEY 的表上创建 GSI。
    2. 在架构中的 Mutation.createTag 字段上创建管道解析器。您可以通过将@model 定义更改为@model(mutations: { update: "updateTag", delete: "deleteTag" }) 来关闭自动生成的Mutation.createTag 突变。
    3. 创建一个名为LookupLabel 的函数,该函数针对label = $ctx.args.input.label 所在的新GSI 发出Query。如果这返回一个值,则使用$util.error("Label is not unique") 引发错误。如果它没有返回值,则继续。
    4. 创建一个名为 CreateTag 的函数,该函数针对 Tag 表发出 PutItem
    5. 将这两个函数添加到您的管道解析器中。

    您可以在此处https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html 阅读有关管道解析器的更多信息。

    在撰写本文时,amplify 尚不支持自定义和管道解析器,但您可以在https://github.com/aws-amplify/amplify-cli/issues/574 处阅读有关该功能的更多信息,因为它将在未来得到支持。现在,您可以在 AWS AppSync 控制台中手动添加解析器,也可以通过您自己的 CloudFormation 模板添加解析器,该模板以 Amplify 创建的 API 的 id 为目标。如果您在此处创建问题 (https://github.com/aws-amplify/amplify-cli/issues) 并将其标记为功能请求也会很有帮助,因为可以使用 @unique 指令自动执行此操作,但这需要进行计划。

    谢谢

    【讨论】:

    • 感谢您的详细阐述!我相信 Amplify 和 AWS 服务非常强大,但开发人员的体验非常糟糕。每个模块都有一些复杂的配置和/或处理,我从未感到如此痛苦。我真的很喜欢它背后的概念和想法,但这是最后一根稻草。我将删除 Amplify 和所有模块(托管除外)并采用更“传统”的方法。我没有做这件事。
    • 感谢您提供更详细的说明,这些说明非常有帮助。我会花一些时间来审视和思考这些 cmets,并可能会提出更多问题。感谢您的反馈。
    • 这样的视频也很棒。 ?
    • 一年多没有进展?
    • 我相信现在使用 GraphQL 转换器简化了添加自定义解析器的过程,但是更清楚地解释如何添加一个以强制执行唯一字段会非常好。
    【解决方案2】:

    我最终会对此进行测试以查看它是否有效,但您也许可以执行一些操作,例如将 id 重命名为字符串! 所以...

    type Tag @model @key["id"] {
    id: String!
    }
    

    或:

    type Customer @model @key(fields: ["email"]) {
    email: String!
    username: String
    }
    

    第二个直接取自文档:https://docs.amplify.aws/cli/graphql-transformer/key#designing-data-models-using-key
    文档最近更新了,希望大家更容易理解。

    【讨论】:

    • 这只适用于主键。您不能以这种方式添加额外的唯一索引。
    猜你喜欢
    • 2020-01-05
    • 2020-08-20
    • 2021-10-04
    • 2021-05-21
    • 2021-08-31
    • 2014-10-15
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多