我目前正在使用GraphQL在服务器上工作,我一直坚持使用指令来实现输入验证。我想做的是向输入类型添加指令,使我可以在将给定的输入传递给实际数据获取程序之前对其进行验证。 架构:
directive @email on INPUT_FIELD_DEFINITION
type Mutation {
getAccounts(filter: InutAccount): [Account]
}
input InputAccount{
email: String @email
}
我已经完成了连接和架构构建的部分,该突变起作用了,但是在实现架构方面存在问题,该架构允许我验证电子邮件(例如:电子邮件必须包含“ @ gmail.com”)。
答案 0 :(得分:0)
通过指令进行的输入验证不能立即使用。我建议两种解决方法。
没有外部库-解析器负责验证
这是最基本的解决方案。您的数据提取程序(解析程序)必须返回一个DataFetcherResult,该结果可能包含一个或多个GraphQLError。在数据提取器中,您可以实施验证,填充DataFetcherResult GraphQLError,如果未发现错误,请执行您的突变。
这可以通过使用graphl-java-tools将GraphQL输入对象与POJO映射来改善,并在处理输入之前使用javax批注和验证器来验证输入。
使用GraphQL-Java扩展验证库- https://github.com/graphql-java/graphql-java-extended-validation
该库可满足您的需求,并为您提供一些基本的指令和相关的约束。请注意,该库是一个非常新的库(有一些错误被视为嵌套输入验证)。