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)
答案 0 :(得分:1)
嘿,谢谢你的提问。默认情况下,使用amplify-cli无法实现此操作,但您可以使用管道解析器和DynamoDB表上的额外索引来自己完成此操作。为此,请执行以下步骤:
Mutation.createTag
字段上创建管道解析器。您可以通过将@model定义更改为Mutation.createTag
来关闭自动生成的@model(mutations: { update: "updateTag", delete: "deleteTag" })
突变。LookupLabel
的函数,该函数针对新的GSI Query
发出一个label = $ctx.args.input.label
。如果返回值,则用$util.error("Label is not unique")
引发错误。如果未返回任何值,则继续。CreateTag
的函数,该函数针对Tag表发出一个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指令将其自动化,但这需要进行计划。
谢谢
答案 1 :(得分:1)
我最终会对此进行测试,看看这是否有效,但您可以执行一些操作,例如将 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
文档最近更新了,希望能让大家更容易理解。