首页 > 解决方案 > AWS-Amplify API 模块:如何使 GraphQL 字段独一无二?

问题描述

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 )

标签: graphqlaws-appsyncaws-amplify

解决方案


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

  1. 在标签为 HASH KEY 的表上创建 GSI。
  2. Mutation.createTag在架构中的字段上创建管道解析器。Mutation.createTag您可以通过将 @model 定义更改为 来关闭自动生成的突变@model(mutations: { update: "updateTag", delete: "deleteTag" })
  3. 创建一个名为的函数,该函数针对新 GSILookupLabel发出. 如果这返回一个值,则使用 抛出一个错误。如果它没有返回值,则继续。Querylabel = $ctx.args.input.label$util.error("Label is not unique")
  4. 创建一个名为对 Tag 表CreateTag发出 a的函数。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 指令自动执行此操作但这需要计划。

谢谢


推荐阅读