如何将一个简单的GraphQL模式转换为验证规则?我可以通过导入访问服务器端,通过查询访问客户端?
我可以看到我如何为枚举做这件事,比如说我有一个标题:
enum Title {
Mr, Ms, Mrs, Dr
}
我可以通过查询来访问可能的值
__type (name: "Title") {
name
enumValues {
name
}
}
现在我可以在客户端上创建下拉列表或在服务器上创建验证,但我如何编码和访问例如字符串字段的最小/最大长度?或者一个数字的最小/最大值?
是否需要为每个字段添加自定义类型?或者,有更好的方法吗?
[edit]回应Daniel的回答:
我使用yup进行验证,这是一个很好的库,但例如,如果gqlInputType上的某个字段是必需的,我如何将其输入到yup模式中?
我该如何在前端使用这个yup模式?理想情况下,我希望将其串行化,发送到客户端,并在那里重建验证。
我能想到的唯一其他方法是共享代码,但每次架构更改时,我都需要重新构建和部署客户端,这当然是不可能的:/
有多种类型的数据验证,例如:
- 数据类型(此值是字符串还是数字?(
- 范围(此值是否在此值范围内?(
- 约束(此值是否满足此正则表达式?(
- 一致性(结束日期是否在开始日期之后?(
- 引用(提供的标识符是否引用了实际存在的实体?(
像GraphQL这样的强类型语言只能真正提供数据类型验证。GraphQL服务可以执行其他类型的验证(通过数据源、数据模型、自定义GraphQL标量等(——但是,只有类型的信息可以从服务中内省。反省不是向客户传达其他验证逻辑的合适工具。
如果您在后端使用Node.js,并且您的意图是在后端和前端之间共享验证逻辑,那么最好的方法是使用像yup或joi这样的库。