给定 GraphQL 模式,是不是可以进行客户端预突变验证?

Posted

技术标签:

【中文标题】给定 GraphQL 模式,是不是可以进行客户端预突变验证?【英文标题】:Given GraphQL schema, is it possible to do client-side pre-mutation validation?给定 GraphQL 模式,是否可以进行客户端预突变验证? 【发布时间】:2017-02-11 12:55:06 【问题描述】:

我有一个 Relay 应用程序,它与服务器共享一个 GraphQL 架构。对于每个突变,它都会查询服务器,然后服务器返回有关哪个字段值无效的错误消息。但是鉴于客户端上也存在该架构,是否可以针对该架构进行客户端验证?

【问题讨论】:

这正是我想要的。找到任何解决方案了吗? 【参考方案1】:

一个实用的解决方案可能是使用 Yup 和 Formik 共生体,然后围绕您的 inputType 手动创建 yup 模式对象,该对象在前端和后端共享。

虽然您没有针对中继编译器提供的架构验证 1-1,但它仍然是一种在客户端进行验证的实用方法。

javascript 解决方案:根据自定义输入类型创建验证模式,并将验证模式传递给 Formik:

const Schema = object().shape(
  coolOrWhat: boolean()
);

return (
  <Formik
    initialValues=
      coolOrWhat: true
    
    validationSchema=Schema
    ...
  >
  /* form inputs here */
  </Formik>
)

TypeScript 解决方案:创建对象进行验证,在实例化 formik 组件时推断类型并注解该对象:

const Schema = object(
 foo: string()
);

export type SchemaType = InferType<typeof Schema>;

type Props = 
 onConfirm: (value: SchemaType) => void;
 onCancel: () => void;
;

<Formik<SchemaType>
 validationSchema=Schema 
 ...>
 ...
</>

【讨论】:

以上是关于给定 GraphQL 模式,是不是可以进行客户端预突变验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Graphql 模式生成 java 实体

使用 GraphQl 返回无模式对象? [复制]

joinmonster 不是一个函数 - GraphQL

Apollo GraphQL 客户端查询返回自省结果而不是数据

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

GraphQL 是不是会在失败时取消数据获取?