graphql - 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 )
解决方案
嘿,谢谢你的问题。默认情况下,使用 amplify-cli 尚无法做到这一点,但您可以使用管道解析器和 DynamoDB 表上的额外索引自己执行此操作。执行此操作的步骤如下:
- 在标签为 HASH KEY 的表上创建 GSI。
Mutation.createTag
在架构中的字段上创建管道解析器。Mutation.createTag
您可以通过将 @model 定义更改为 来关闭自动生成的突变@model(mutations: { update: "updateTag", delete: "deleteTag" })
。- 创建一个名为的函数,该函数针对新 GSI
LookupLabel
发出. 如果这返回一个值,则使用 抛出一个错误。如果它没有返回值,则继续。Query
label = $ctx.args.input.label
$util.error("Label is not unique")
- 创建一个名为对 Tag 表
CreateTag
发出 a的函数。PutItem
- 将这两个函数添加到您的管道解析器中。
您可以在此处阅读有关管道解析器的更多信息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 指令自动执行此操作但这需要计划。
谢谢
推荐阅读
- iphone - 构建一个使用 React Native 创建的 iPhone 应用程序
- axon - 如何在 Saga 中测试具有内部状态的方法
- git - Git克隆和修改开源作为子目录并与master保持更新
- elasticsearch - 从 Elasticsearch 获取不同的字段
- javascript - Laravel 不导入/读取公共源文件 (css/js)
- c# - 如何使用 RegAsm 调用方法 C# Dll 方法?
- swift - Swift 4.2 UIDocumentBrowser View Controller Powerpoint PPTX 文件灰显
- database - symfony 对数据库表名有什么建议?
- ionic-framework - 如何从对讲或其他屏幕阅读器读取离子应用程序网络视图?
- unity3d - 如何知道 Unity Vuforia 中的地面检测是否丢失?