简体   繁体   English

根据示例 JSON object 验证 GraphQL 架构

[英]Validate GraphQL Schema against a sample JSON object

I want to validate Graphql Schema against a Sample JSON document whether the sample JSON document has all the required fields or not.我想根据示例 JSON 文档验证 Z3540F3F3F751F2A6FD0584DD35F836C32AZ 架构,示例 JSON 文档是否具有所有必需的字段。

As you can see from the below Graphql schema id , name are required fields and sample JSON object also has those properties.正如您从下面看到的 Graphql 架构idname是必填字段,示例 JSON object 也具有这些属性。 Desirable validateMySampleJSON(schema, sampleJSON) should return true in this case.在这种情况下,理想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

If you are looking for a solution using GraphQL tools, then the answer is no as of today.如果您正在寻找使用 GraphQL 工具的解决方案,那么截至今天,答案是否定的。 I don't see any validate function out of the box.我没有看到任何开箱即用的验证 function。 However you can achieve this using a combination of other tools.但是,您可以使用其他工具的组合来实现此目的。

  1. You can cover the GraphQL schema to JSON Schema using graphql-2-json-schema package.您可以使用graphql-2-json-schema package 将 GraphQL 架构覆盖到 JSON 架构。
  2. Once you have the JSON Schema, you can use jsonschema package to load the schema and validate the data against it.拥有 JSON 架构后,您可以使用jsonschema package 加载架构并根据它验证数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM