如何从 GraphQL 模式创建验证规则

Hum*_*ood 5 validation graphql

如何将一个简单的 GraphQL 模式(可以通过导入来访问服务器端并通过查询来访问客户端)转换为验证规则?

我可以看到如何对枚举执行此操作,假设我有一个标题:

  enum Title {
    Mr, Ms, Mrs, Dr
  }
Run Code Online (Sandbox Code Playgroud)

我可以通过查询访问可能的值

  __type (name: "Title") {
    name
    enumValues {
      name
    }
  }
Run Code Online (Sandbox Code Playgroud)

现在我可以在客户端上创建一个下拉列表或在服务器上创建一个验证,但是如何编码和访问例如字符串字段的最小/最大长度?或者数字的最小/最大值?

我需要为每个字段添加自定义类型吗?或者,还有更好的方法?


[编辑]回应丹尼尔的回答:

我使用 yup 进行验证,这是一个很棒的库,但例如,如果gql InputType需要某个字段,我如何将其放入 yup 架构中?

我如何在前端使用这个 yup 模式?理想情况下,我想将其序列化,将其发送给客户端,并在那里重建验证。

我能想到的唯一其他方法是共享代码,但是每次模式更改时我都需要重新构建和重新部署客户端,这当然是不可能的:/

Dan*_*den 3

数据验证有很多种,例如:

  • 数据类型(该值是字符串还是数字?)
  • 范围(该值是否在此值范围内?)
  • 约束(这个值是否满足这个正则表达式?)
  • 一致性(结束日期晚于开始日期吗?)
  • 引用(提供的标识符是否引用实际存在的实体?)

像 GraphQL 这样的强类型语言只能真正提供数据类型验证。您的 GraphQL 服务可能会执行其他类型的验证(通过您的数据源、数据模型、自定义 GraphQL 标量等)——但是,只能从服务中内省类型信息。内省并不是向客户传达其他验证逻辑的合适工具。

如果您在后端使用 Node.js 并且您的目的是在后端和前端之间共享验证逻辑,那么最好的方法是使用yupjoi这样的库。