针对示例JSON对象验证GraphQL模式

问题描述

我想针对示例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工具的解决方案,那么截至目前,答案是否定的。我没有开箱即用的任何验证功能。但是,您可以结合使用其他工具来实现此目的。

  1. 您可以使用graphql-2-json-schema包将GraphQL模式转换为JSON模式。
  2. 拥有JSON模式后,就可以使用jsonschema包来加载模式并根据该数据验证数据。