【问题标题】:Input validation with directives使用指令进行输入验证
【发布时间】:2020-03-21 21:59:15
【问题描述】:

我目前正在使用 GraphQL 在服务器上工作,并且一直坚持使用指令实现输入验证。我想要做的是向输入类型添加指令,允许我在将输入传递给实际数据获取器之前验证给定的输入。 架构:

directive @email on INPUT_FIELD_DEFINITION
type Mutation {
   getAccounts(filter: InutAccount): [Account] 
}
input InputAccount{
   email: String @email
}

我已经完成了布线和架构构建部分,突变工作,但我在实现允许我验证电子邮件的架构时遇到问题(例如:电子邮件必须包含“@gmail.com”)。

【问题讨论】:

    标签: graphql graphql-java


    【解决方案1】:

    通过指令的输入验证不能开箱即用。我建议两种方法来解决这个问题。

    没有外部库 - 解析器负责验证

    这是最基本的解决方案。您的数据提取器(解析器)必须返回一个 DataFetcherResult,它可能包含一个或多个 GraphQLError。在数据提取器中,您可以实现验证,填充 DataFetcherResult GraphQLError,如果没有发现错误,则执行您的突变。

    这可以通过将您的 GraphQL 输入对象映射到 POJO 来改进,就像 graphl-java-tools 所做的那样,并使用 javax 注释和验证器在处理输入之前验证您的输入。

    使用 GraphQL-Java 扩展验证库 - https://github.com/graphql-java/graphql-java-extended-validation

    这个库做你想做的事,并为你提供一些基本的指令和相关的约束。请注意这个库是相当新的(有几个错误被视为嵌套输入验证)。

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      相关资源
      最近更新 更多