问题描述
我想针对示例JSON文档验证Graphql模式,无论示例JSON文档是否具有所有必填字段。
从下面的Graphql模式id
中可以看到,name
是必填字段,样本JSON对象也具有这些属性。在这种情况下,理想的validateMySampleJSON(schema,sampleJSON)
应该返回true。
import {
GraphQLID,GraphQLNonNull,GraphQLObjectType,GraphQLSchema,GraphQLString,} from 'graphql';
const RootQuery = new GraphQLObjectType({
name: 'Book',fields: () => ({
id: { type: GraphQLNonNull(GraphQLID) },name: { type: GraphQLNonNull(GraphQLString) },genre: { type: GraphQLString },}),});
const schema = new GraphQLSchema({
query: RootQuery,});
const sampleJSON = {
'id': '1','name': 'Awesome Book',};
const isValid = validateMySampleJSON(schema,sampleJSON);
console.log(isValid); // true
const anotherSampleJSON = {
'id': '1','genre': 'mystery'
};
const isValid = validateMySampleJSON(schema,anotherSampleJSON);
console.log(isValid); // false
解决方法
如果您正在寻找使用GraphQL工具的解决方案,那么截至目前,答案是否定的。我没有开箱即用的任何验证功能。但是,您可以结合使用其他工具来实现此目的。
- 您可以使用
graphql-2-json-schema
包将GraphQL模式转换为JSON模式。 - 拥有JSON模式后,就可以使用
jsonschema
包来加载模式并根据该数据验证数据。