【问题标题】:Validate GraphQL Schema against a sample JSON object针对示例 JSON 对象验证 GraphQL Schema
【发布时间】:2020-12-01 18:12:08
【问题描述】:

我想根据示例 JSON 文档验证 Graphql Schema,无论示例 JSON 文档是否包含所有必需的字段。

从下面的 Graphql 架构中可以看出,idname 是必填字段,示例 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

【问题讨论】:

    标签: json graphql


    【解决方案1】:

    如果您正在寻找使用 GraphQL 工具的解决方案,那么截至目前,答案是否定的。我没有看到任何开箱即用的验证功能。但是,您可以使用其他工具的组合来实现此目的。

    1. 您可以使用 graphql-2-json-schema 包将 GraphQL 架构覆盖到 JSON 架构。
    2. 拥有 JSON 架构后,您可以使用 jsonschema 包加载架构并根据它验证数据。

    【讨论】:

    • 感谢您的回复。我已经尝试过这种方法,graphql-2-json-schema 的问题是,它在创建 JSON 模式后不将GraphQLNonNull 视为必填字段,使用此 npm 的另一个问题是,这会生成 JSON 模式draft-6 但我想要为 Draft-7 规范生成 JSON 模式。
    猜你喜欢
    • 1970-01-01
    • 2018-05-24
    • 2015-10-24
    • 2021-10-21
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多