AWS Amplify API模块:如何使GraphQL字段唯一?

AWS Amplify API模块:如何使GraphQL字段唯一?,graphql,aws-appsync,aws-amplify,Graphql,Aws Appsync,Aws Amplify,AWS Amplify提供了两个指令来构建GraphQL API。但我还没有发现如何确保字段的唯一性 我想在GraphTool中执行类似的操作: type Tag @model @searchable { id: ID! label: String! @isUnique } 这是一个具体的问题。这与如何使用通用GraphQL无关。它非常具体地介绍了如何使用AWS Amplify的API模块实现这一点。()嘿,谢谢你的问题。默认情况下,使用amplify cli还不可能做到这一点,但您可

AWS Amplify提供了两个指令来构建GraphQL API。但我还没有发现如何确保字段的唯一性

我想在GraphTool中执行类似的操作:

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

这是一个具体的问题。这与如何使用通用GraphQL无关。它非常具体地介绍了如何使用AWS Amplify的API模块实现这一点。()

嘿,谢谢你的问题。默认情况下,使用amplify cli还不可能做到这一点,但您可以自己使用管道解析器和DynamoDB表上的额外索引来做到这一点。执行此操作的步骤如下所示:

  • 在标签为哈希键的表上创建GSI
  • 在模式中的
    Mutation.createTag
    字段上创建管道解析器。通过将@model定义更改为
    @model(突变:{update:“updateTag”,delete:“deletetetettag”}),可以关闭自动生成的
    突变.createTag
    突变
  • 创建名为
    LookupLabel
    的函数,该函数针对新GSI发出
    查询
    ,其中
    标签=$ctx.args.input.label
    。如果返回一个值,则抛出一个带有
    $util.error(“标签不唯一”)
    的错误。如果没有返回值,则继续
  • 创建名为
    CreateTag
    的函数,该函数针对标记表发出
    PutItem
  • 将这两个函数添加到管道解析器中
  • 您可以在此处阅读有关管道解析器的更多信息

    在撰写本文时,amplify还不支持自定义和管道解析器,但您可以在此处了解更多有关该功能的信息,因为它将在将来得到支持。现在,您可以在AWS AppSync控制台中手动添加解析器,或者通过您自己的CloudFormation模板添加解析器,该模板以Amplify创建的API的id为目标。如果您在此处创建一个问题()并将其标记为功能请求,这也会很有帮助,因为可以使用@unique指令将其自动化,但这需要计划


    谢谢

    我最终会测试这一点,看看这是否有效,但您可能可以做一些事情,比如将id重命名为字符串! 所以

    或:

    第二个直接取自文档:

    这些文档是最近更新的,希望大家能更容易理解。

    感谢您的详细阐述!我相信Amplify和AWS服务非常强大,但是开发者的体验非常糟糕。每个模块都有一些复杂的配置和/或处理,我从来没有在开发过程中感到如此痛苦。我真的很喜欢它背后的概念和想法,但这是最后一根稻草。我将删除Amplify和所有模块(托管除外),并采用更“传统”的方法。我没有完成这件事。谢谢你提供更详细的说明。这些非常有用。我会花一些时间来审视和思考这些评论,并可能提出更多的问题。谢谢你的反馈。这段视频也很好。已经一年多了,没有任何进展?我相信现在使用GraphQL Transformer可以简化添加自定义解析器的过程,但是更清楚地解释如何添加一个解析器来强制执行一个独特的字段会非常好。
    type Tag @model @key["id"] {
    id: String!
    }
    
    type Customer @model @key(fields: ["email"]) {
    email: String!
    username: String
    }